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

import "objidl.idl";

cpp_quote("#ifndef __IOleAdviseHolder_FWD_DEFINED__")
cpp_quote("#define __IOleAdviseHolder_FWD_DEFINED__")
cpp_quote("typedef struct IOleAdviseHolder IOleAdviseHolder;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleCache_FWD_DEFINED__")
cpp_quote("#define __IOleCache_FWD_DEFINED__")
cpp_quote("typedef struct IOleCache IOleCache;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleCache2_FWD_DEFINED__")
cpp_quote("#define __IOleCache2_FWD_DEFINED__")
cpp_quote("typedef struct IOleCache2 IOleCache2;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleCacheControl_FWD_DEFINED__")
cpp_quote("#define __IOleCacheControl_FWD_DEFINED__")
cpp_quote("typedef struct IOleCacheControl IOleCacheControl;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IParseDisplayName_FWD_DEFINED__")
cpp_quote("#define __IParseDisplayName_FWD_DEFINED__")
cpp_quote("typedef struct IParseDisplayName IParseDisplayName;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleContainer_FWD_DEFINED__")
cpp_quote("#define __IOleContainer_FWD_DEFINED__")
cpp_quote("typedef struct IOleContainer IOleContainer;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleClientSite_FWD_DEFINED__")
cpp_quote("#define __IOleClientSite_FWD_DEFINED__")
cpp_quote("typedef struct IOleClientSite IOleClientSite;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleObject_FWD_DEFINED__")
cpp_quote("#define __IOleObject_FWD_DEFINED__")
cpp_quote("typedef struct IOleObject IOleObject;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleWindow_FWD_DEFINED__")
cpp_quote("#define __IOleWindow_FWD_DEFINED__")
cpp_quote("typedef struct IOleWindow IOleWindow;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleLink_FWD_DEFINED__")
cpp_quote("#define __IOleLink_FWD_DEFINED__")
cpp_quote("typedef struct IOleLink IOleLink;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleItemContainer_FWD_DEFINED__")
cpp_quote("#define __IOleItemContainer_FWD_DEFINED__")
cpp_quote("typedef struct IOleItemContainer IOleItemContainer;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleInPlaceUIWindow_FWD_DEFINED__")
cpp_quote("#define __IOleInPlaceUIWindow_FWD_DEFINED__")
cpp_quote("typedef struct IOleInPlaceUIWindow IOleInPlaceUIWindow;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleInPlaceActiveObject_FWD_DEFINED__")
cpp_quote("#define __IOleInPlaceActiveObject_FWD_DEFINED__")
cpp_quote("typedef struct IOleInPlaceActiveObject IOleInPlaceActiveObject;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleInPlaceFrame_FWD_DEFINED__")
cpp_quote("#define __IOleInPlaceFrame_FWD_DEFINED__")
cpp_quote("typedef struct IOleInPlaceFrame IOleInPlaceFrame;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleInPlaceObject_FWD_DEFINED__")
cpp_quote("#define __IOleInPlaceObject_FWD_DEFINED__")
cpp_quote("typedef struct IOleInPlaceObject IOleInPlaceObject;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleInPlaceSite_FWD_DEFINED__")
cpp_quote("#define __IOleInPlaceSite_FWD_DEFINED__")
cpp_quote("typedef struct IOleInPlaceSite IOleInPlaceSite;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IContinue_FWD_DEFINED__")
cpp_quote("#define __IContinue_FWD_DEFINED__")
cpp_quote("typedef struct IContinue IContinue;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IViewObject_FWD_DEFINED__")
cpp_quote("#define __IViewObject_FWD_DEFINED__")
cpp_quote("typedef struct IViewObject IViewObject;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IViewObject2_FWD_DEFINED__")
cpp_quote("#define __IViewObject2_FWD_DEFINED__")
cpp_quote("typedef struct IViewObject2 IViewObject2;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IDropSource_FWD_DEFINED__")
cpp_quote("#define __IDropSource_FWD_DEFINED__")
cpp_quote("typedef struct IDropSource IDropSource;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IDropTarget_FWD_DEFINED__")
cpp_quote("#define __IDropTarget_FWD_DEFINED__")
cpp_quote("typedef struct IDropTarget IDropTarget;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IEnumOLEVERB_FWD_DEFINED__")
cpp_quote("#define __IEnumOLEVERB_FWD_DEFINED__")
cpp_quote("typedef struct IEnumOLEVERB IEnumOLEVERB;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_oleidl_0000_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_oleidl_0000_v0_0_s_ifspec;")
cpp_quote("")
cpp_quote("#ifndef __IOleAdviseHolder_INTERFACE_DEFINED__")
cpp_quote("#define __IOleAdviseHolder_INTERFACE_DEFINED__")
cpp_quote("")
cpp_quote("  typedef IOleAdviseHolder *LPOLEADVISEHOLDER;")
cpp_quote("  EXTERN_C const IID IID_IOleAdviseHolder;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleAdviseHolder : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Advise(IAdviseSink *pAdvise,DWORD *pdwConnection) = 0;")
cpp_quote("    virtual HRESULT WINAPI Unadvise(DWORD dwConnection) = 0;")
cpp_quote("    virtual HRESULT WINAPI EnumAdvise(IEnumSTATDATA **ppenumAdvise) = 0;")
cpp_quote("    virtual HRESULT WINAPI SendOnRename(IMoniker *pmk) = 0;")
cpp_quote("    virtual HRESULT WINAPI SendOnSave(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI SendOnClose(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleAdviseHolderVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleAdviseHolder *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleAdviseHolder *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleAdviseHolder *This);")
cpp_quote("      HRESULT (WINAPI *Advise)(IOleAdviseHolder *This,IAdviseSink *pAdvise,DWORD *pdwConnection);")
cpp_quote("      HRESULT (WINAPI *Unadvise)(IOleAdviseHolder *This,DWORD dwConnection);")
cpp_quote("      HRESULT (WINAPI *EnumAdvise)(IOleAdviseHolder *This,IEnumSTATDATA **ppenumAdvise);")
cpp_quote("      HRESULT (WINAPI *SendOnRename)(IOleAdviseHolder *This,IMoniker *pmk);")
cpp_quote("      HRESULT (WINAPI *SendOnSave)(IOleAdviseHolder *This);")
cpp_quote("      HRESULT (WINAPI *SendOnClose)(IOleAdviseHolder *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleAdviseHolderVtbl;")
cpp_quote("  struct IOleAdviseHolder {")
cpp_quote("    CONST_VTBL struct IOleAdviseHolderVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleAdviseHolder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleAdviseHolder_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleAdviseHolder_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleAdviseHolder_Advise(This,pAdvise,pdwConnection) (This)->lpVtbl->Advise(This,pAdvise,pdwConnection)")
cpp_quote("#define IOleAdviseHolder_Unadvise(This,dwConnection) (This)->lpVtbl->Unadvise(This,dwConnection)")
cpp_quote("#define IOleAdviseHolder_EnumAdvise(This,ppenumAdvise) (This)->lpVtbl->EnumAdvise(This,ppenumAdvise)")
cpp_quote("#define IOleAdviseHolder_SendOnRename(This,pmk) (This)->lpVtbl->SendOnRename(This,pmk)")
cpp_quote("#define IOleAdviseHolder_SendOnSave(This) (This)->lpVtbl->SendOnSave(This)")
cpp_quote("#define IOleAdviseHolder_SendOnClose(This) (This)->lpVtbl->SendOnClose(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleAdviseHolder_Advise_Proxy(IOleAdviseHolder *This,IAdviseSink *pAdvise,DWORD *pdwConnection);")
cpp_quote("  void __RPC_STUB IOleAdviseHolder_Advise_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleAdviseHolder_Unadvise_Proxy(IOleAdviseHolder *This,DWORD dwConnection);")
cpp_quote("  void __RPC_STUB IOleAdviseHolder_Unadvise_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleAdviseHolder_EnumAdvise_Proxy(IOleAdviseHolder *This,IEnumSTATDATA **ppenumAdvise);")
cpp_quote("  void __RPC_STUB IOleAdviseHolder_EnumAdvise_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleAdviseHolder_SendOnRename_Proxy(IOleAdviseHolder *This,IMoniker *pmk);")
cpp_quote("  void __RPC_STUB IOleAdviseHolder_SendOnRename_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleAdviseHolder_SendOnSave_Proxy(IOleAdviseHolder *This);")
cpp_quote("  void __RPC_STUB IOleAdviseHolder_SendOnSave_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleAdviseHolder_SendOnClose_Proxy(IOleAdviseHolder *This);")
cpp_quote("  void __RPC_STUB IOleAdviseHolder_SendOnClose_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleCache_INTERFACE_DEFINED__")
cpp_quote("#define __IOleCache_INTERFACE_DEFINED__")
cpp_quote("  typedef IOleCache *LPOLECACHE;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IOleCache;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleCache : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Cache(FORMATETC *pformatetc,DWORD advf,DWORD *pdwConnection) = 0;")
cpp_quote("    virtual HRESULT WINAPI Uncache(DWORD dwConnection) = 0;")
cpp_quote("    virtual HRESULT WINAPI EnumCache(IEnumSTATDATA **ppenumSTATDATA) = 0;")
cpp_quote("    virtual HRESULT WINAPI InitCache(IDataObject *pDataObject) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetData(FORMATETC *pformatetc,STGMEDIUM *pmedium,WINBOOL fRelease) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleCacheVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleCache *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleCache *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleCache *This);")
cpp_quote("      HRESULT (WINAPI *Cache)(IOleCache *This,FORMATETC *pformatetc,DWORD advf,DWORD *pdwConnection);")
cpp_quote("      HRESULT (WINAPI *Uncache)(IOleCache *This,DWORD dwConnection);")
cpp_quote("      HRESULT (WINAPI *EnumCache)(IOleCache *This,IEnumSTATDATA **ppenumSTATDATA);")
cpp_quote("      HRESULT (WINAPI *InitCache)(IOleCache *This,IDataObject *pDataObject);")
cpp_quote("      HRESULT (WINAPI *SetData)(IOleCache *This,FORMATETC *pformatetc,STGMEDIUM *pmedium,WINBOOL fRelease);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleCacheVtbl;")
cpp_quote("  struct IOleCache {")
cpp_quote("    CONST_VTBL struct IOleCacheVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleCache_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleCache_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleCache_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleCache_Cache(This,pformatetc,advf,pdwConnection) (This)->lpVtbl->Cache(This,pformatetc,advf,pdwConnection)")
cpp_quote("#define IOleCache_Uncache(This,dwConnection) (This)->lpVtbl->Uncache(This,dwConnection)")
cpp_quote("#define IOleCache_EnumCache(This,ppenumSTATDATA) (This)->lpVtbl->EnumCache(This,ppenumSTATDATA)")
cpp_quote("#define IOleCache_InitCache(This,pDataObject) (This)->lpVtbl->InitCache(This,pDataObject)")
cpp_quote("#define IOleCache_SetData(This,pformatetc,pmedium,fRelease) (This)->lpVtbl->SetData(This,pformatetc,pmedium,fRelease)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleCache_Cache_Proxy(IOleCache *This,FORMATETC *pformatetc,DWORD advf,DWORD *pdwConnection);")
cpp_quote("  void __RPC_STUB IOleCache_Cache_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleCache_Uncache_Proxy(IOleCache *This,DWORD dwConnection);")
cpp_quote("  void __RPC_STUB IOleCache_Uncache_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleCache_EnumCache_Proxy(IOleCache *This,IEnumSTATDATA **ppenumSTATDATA);")
cpp_quote("  void __RPC_STUB IOleCache_EnumCache_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleCache_InitCache_Proxy(IOleCache *This,IDataObject *pDataObject);")
cpp_quote("  void __RPC_STUB IOleCache_InitCache_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleCache_SetData_Proxy(IOleCache *This,FORMATETC *pformatetc,STGMEDIUM *pmedium,WINBOOL fRelease);")
cpp_quote("  void __RPC_STUB IOleCache_SetData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleCache2_INTERFACE_DEFINED__")
cpp_quote("#define __IOleCache2_INTERFACE_DEFINED__")
cpp_quote("  typedef IOleCache2 *LPOLECACHE2;")
cpp_quote("")
cpp_quote("#define UPDFCACHE_NODATACACHE (0x1)")
cpp_quote("#define UPDFCACHE_ONSAVECACHE (0x2)")
cpp_quote("#define UPDFCACHE_ONSTOPCACHE (0x4)")
cpp_quote("#define UPDFCACHE_NORMALCACHE (0x8)")
cpp_quote("#define UPDFCACHE_IFBLANK (0x10)")
cpp_quote("#define UPDFCACHE_ONLYIFBLANK (0x80000000)")
cpp_quote("#define UPDFCACHE_IFBLANKORONSAVECACHE (UPDFCACHE_IFBLANK | UPDFCACHE_ONSAVECACHE)")
cpp_quote("#define UPDFCACHE_ALL ((DWORD)~UPDFCACHE_ONLYIFBLANK)")
cpp_quote("#define UPDFCACHE_ALLBUTNODATACACHE (UPDFCACHE_ALL & (DWORD)~UPDFCACHE_NODATACACHE)")
cpp_quote("")
cpp_quote("  typedef enum tagDISCARDCACHE {")
cpp_quote("    DISCARDCACHE_SAVEIFDIRTY = 0,DISCARDCACHE_NOSAVE = 1")
cpp_quote("  } DISCARDCACHE;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IOleCache2;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleCache2 : public IOleCache {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI UpdateCache(LPDATAOBJECT pDataObject,DWORD grfUpdf,LPVOID pReserved) = 0;")
cpp_quote("    virtual HRESULT WINAPI DiscardCache(DWORD dwDiscardOptions) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleCache2Vtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleCache2 *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleCache2 *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleCache2 *This);")
cpp_quote("      HRESULT (WINAPI *Cache)(IOleCache2 *This,FORMATETC *pformatetc,DWORD advf,DWORD *pdwConnection);")
cpp_quote("      HRESULT (WINAPI *Uncache)(IOleCache2 *This,DWORD dwConnection);")
cpp_quote("      HRESULT (WINAPI *EnumCache)(IOleCache2 *This,IEnumSTATDATA **ppenumSTATDATA);")
cpp_quote("      HRESULT (WINAPI *InitCache)(IOleCache2 *This,IDataObject *pDataObject);")
cpp_quote("      HRESULT (WINAPI *SetData)(IOleCache2 *This,FORMATETC *pformatetc,STGMEDIUM *pmedium,WINBOOL fRelease);")
cpp_quote("      HRESULT (WINAPI *UpdateCache)(IOleCache2 *This,LPDATAOBJECT pDataObject,DWORD grfUpdf,LPVOID pReserved);")
cpp_quote("      HRESULT (WINAPI *DiscardCache)(IOleCache2 *This,DWORD dwDiscardOptions);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleCache2Vtbl;")
cpp_quote("  struct IOleCache2 {")
cpp_quote("    CONST_VTBL struct IOleCache2Vtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleCache2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleCache2_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleCache2_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleCache2_Cache(This,pformatetc,advf,pdwConnection) (This)->lpVtbl->Cache(This,pformatetc,advf,pdwConnection)")
cpp_quote("#define IOleCache2_Uncache(This,dwConnection) (This)->lpVtbl->Uncache(This,dwConnection)")
cpp_quote("#define IOleCache2_EnumCache(This,ppenumSTATDATA) (This)->lpVtbl->EnumCache(This,ppenumSTATDATA)")
cpp_quote("#define IOleCache2_InitCache(This,pDataObject) (This)->lpVtbl->InitCache(This,pDataObject)")
cpp_quote("#define IOleCache2_SetData(This,pformatetc,pmedium,fRelease) (This)->lpVtbl->SetData(This,pformatetc,pmedium,fRelease)")
cpp_quote("#define IOleCache2_UpdateCache(This,pDataObject,grfUpdf,pReserved) (This)->lpVtbl->UpdateCache(This,pDataObject,grfUpdf,pReserved)")
cpp_quote("#define IOleCache2_DiscardCache(This,dwDiscardOptions) (This)->lpVtbl->DiscardCache(This,dwDiscardOptions)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleCache2_RemoteUpdateCache_Proxy(IOleCache2 *This,LPDATAOBJECT pDataObject,DWORD grfUpdf,LONG_PTR pReserved);")
cpp_quote("  void __RPC_STUB IOleCache2_RemoteUpdateCache_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleCache2_DiscardCache_Proxy(IOleCache2 *This,DWORD dwDiscardOptions);")
cpp_quote("  void __RPC_STUB IOleCache2_DiscardCache_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleCacheControl_INTERFACE_DEFINED__")
cpp_quote("#define __IOleCacheControl_INTERFACE_DEFINED__")
cpp_quote("  typedef IOleCacheControl *LPOLECACHECONTROL;")
cpp_quote("  EXTERN_C const IID IID_IOleCacheControl;")
cpp_quote("")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleCacheControl : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI OnRun(LPDATAOBJECT pDataObject) = 0;")
cpp_quote("    virtual HRESULT WINAPI OnStop(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleCacheControlVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleCacheControl *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleCacheControl *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleCacheControl *This);")
cpp_quote("      HRESULT (WINAPI *OnRun)(IOleCacheControl *This,LPDATAOBJECT pDataObject);")
cpp_quote("      HRESULT (WINAPI *OnStop)(IOleCacheControl *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleCacheControlVtbl;")
cpp_quote("  struct IOleCacheControl {")
cpp_quote("    CONST_VTBL struct IOleCacheControlVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleCacheControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleCacheControl_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleCacheControl_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleCacheControl_OnRun(This,pDataObject) (This)->lpVtbl->OnRun(This,pDataObject)")
cpp_quote("#define IOleCacheControl_OnStop(This) (This)->lpVtbl->OnStop(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleCacheControl_OnRun_Proxy(IOleCacheControl *This,LPDATAOBJECT pDataObject);")
cpp_quote("  void __RPC_STUB IOleCacheControl_OnRun_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleCacheControl_OnStop_Proxy(IOleCacheControl *This);")
cpp_quote("  void __RPC_STUB IOleCacheControl_OnStop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IParseDisplayName_INTERFACE_DEFINED__")
cpp_quote("#define __IParseDisplayName_INTERFACE_DEFINED__")
cpp_quote("  typedef IParseDisplayName *LPPARSEDISPLAYNAME;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IParseDisplayName;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IParseDisplayName : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI ParseDisplayName(IBindCtx *pbc,LPOLESTR pszDisplayName,ULONG *pchEaten,IMoniker **ppmkOut) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IParseDisplayNameVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IParseDisplayName *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IParseDisplayName *This);")
cpp_quote("      ULONG (WINAPI *Release)(IParseDisplayName *This);")
cpp_quote("      HRESULT (WINAPI *ParseDisplayName)(IParseDisplayName *This,IBindCtx *pbc,LPOLESTR pszDisplayName,ULONG *pchEaten,IMoniker **ppmkOut);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IParseDisplayNameVtbl;")
cpp_quote("  struct IParseDisplayName {")
cpp_quote("    CONST_VTBL struct IParseDisplayNameVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IParseDisplayName_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IParseDisplayName_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IParseDisplayName_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IParseDisplayName_ParseDisplayName(This,pbc,pszDisplayName,pchEaten,ppmkOut) (This)->lpVtbl->ParseDisplayName(This,pbc,pszDisplayName,pchEaten,ppmkOut)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IParseDisplayName_ParseDisplayName_Proxy(IParseDisplayName *This,IBindCtx *pbc,LPOLESTR pszDisplayName,ULONG *pchEaten,IMoniker **ppmkOut);")
cpp_quote("  void __RPC_STUB IParseDisplayName_ParseDisplayName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleContainer_INTERFACE_DEFINED__")
cpp_quote("#define __IOleContainer_INTERFACE_DEFINED__")
cpp_quote("  typedef IOleContainer *LPOLECONTAINER;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IOleContainer;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleContainer : public IParseDisplayName {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI EnumObjects(DWORD grfFlags,IEnumUnknown **ppenum) = 0;")
cpp_quote("    virtual HRESULT WINAPI LockContainer(WINBOOL fLock) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleContainerVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleContainer *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleContainer *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleContainer *This);")
cpp_quote("      HRESULT (WINAPI *ParseDisplayName)(IOleContainer *This,IBindCtx *pbc,LPOLESTR pszDisplayName,ULONG *pchEaten,IMoniker **ppmkOut);")
cpp_quote("      HRESULT (WINAPI *EnumObjects)(IOleContainer *This,DWORD grfFlags,IEnumUnknown **ppenum);")
cpp_quote("      HRESULT (WINAPI *LockContainer)(IOleContainer *This,WINBOOL fLock);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleContainerVtbl;")
cpp_quote("  struct IOleContainer {")
cpp_quote("    CONST_VTBL struct IOleContainerVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleContainer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleContainer_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleContainer_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleContainer_ParseDisplayName(This,pbc,pszDisplayName,pchEaten,ppmkOut) (This)->lpVtbl->ParseDisplayName(This,pbc,pszDisplayName,pchEaten,ppmkOut)")
cpp_quote("#define IOleContainer_EnumObjects(This,grfFlags,ppenum) (This)->lpVtbl->EnumObjects(This,grfFlags,ppenum)")
cpp_quote("#define IOleContainer_LockContainer(This,fLock) (This)->lpVtbl->LockContainer(This,fLock)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleContainer_EnumObjects_Proxy(IOleContainer *This,DWORD grfFlags,IEnumUnknown **ppenum);")
cpp_quote("  void __RPC_STUB IOleContainer_EnumObjects_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleContainer_LockContainer_Proxy(IOleContainer *This,WINBOOL fLock);")
cpp_quote("  void __RPC_STUB IOleContainer_LockContainer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleClientSite_INTERFACE_DEFINED__")
cpp_quote("#define __IOleClientSite_INTERFACE_DEFINED__")
cpp_quote("  typedef IOleClientSite *LPOLECLIENTSITE;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IOleClientSite;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleClientSite : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI SaveObject(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetMoniker(DWORD dwAssign,DWORD dwWhichMoniker,IMoniker **ppmk) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetContainer(IOleContainer **ppContainer) = 0;")
cpp_quote("    virtual HRESULT WINAPI ShowObject(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI OnShowWindow(WINBOOL fShow) = 0;")
cpp_quote("    virtual HRESULT WINAPI RequestNewObjectLayout(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleClientSiteVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleClientSite *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleClientSite *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleClientSite *This);")
cpp_quote("      HRESULT (WINAPI *SaveObject)(IOleClientSite *This);")
cpp_quote("      HRESULT (WINAPI *GetMoniker)(IOleClientSite *This,DWORD dwAssign,DWORD dwWhichMoniker,IMoniker **ppmk);")
cpp_quote("      HRESULT (WINAPI *GetContainer)(IOleClientSite *This,IOleContainer **ppContainer);")
cpp_quote("      HRESULT (WINAPI *ShowObject)(IOleClientSite *This);")
cpp_quote("      HRESULT (WINAPI *OnShowWindow)(IOleClientSite *This,WINBOOL fShow);")
cpp_quote("      HRESULT (WINAPI *RequestNewObjectLayout)(IOleClientSite *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleClientSiteVtbl;")
cpp_quote("  struct IOleClientSite {")
cpp_quote("    CONST_VTBL struct IOleClientSiteVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleClientSite_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleClientSite_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleClientSite_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleClientSite_SaveObject(This) (This)->lpVtbl->SaveObject(This)")
cpp_quote("#define IOleClientSite_GetMoniker(This,dwAssign,dwWhichMoniker,ppmk) (This)->lpVtbl->GetMoniker(This,dwAssign,dwWhichMoniker,ppmk)")
cpp_quote("#define IOleClientSite_GetContainer(This,ppContainer) (This)->lpVtbl->GetContainer(This,ppContainer)")
cpp_quote("#define IOleClientSite_ShowObject(This) (This)->lpVtbl->ShowObject(This)")
cpp_quote("#define IOleClientSite_OnShowWindow(This,fShow) (This)->lpVtbl->OnShowWindow(This,fShow)")
cpp_quote("#define IOleClientSite_RequestNewObjectLayout(This) (This)->lpVtbl->RequestNewObjectLayout(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleClientSite_SaveObject_Proxy(IOleClientSite *This);")
cpp_quote("  void __RPC_STUB IOleClientSite_SaveObject_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleClientSite_GetMoniker_Proxy(IOleClientSite *This,DWORD dwAssign,DWORD dwWhichMoniker,IMoniker **ppmk);")
cpp_quote("  void __RPC_STUB IOleClientSite_GetMoniker_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleClientSite_GetContainer_Proxy(IOleClientSite *This,IOleContainer **ppContainer);")
cpp_quote("  void __RPC_STUB IOleClientSite_GetContainer_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleClientSite_ShowObject_Proxy(IOleClientSite *This);")
cpp_quote("  void __RPC_STUB IOleClientSite_ShowObject_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleClientSite_OnShowWindow_Proxy(IOleClientSite *This,WINBOOL fShow);")
cpp_quote("  void __RPC_STUB IOleClientSite_OnShowWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleClientSite_RequestNewObjectLayout_Proxy(IOleClientSite *This);")
cpp_quote("  void __RPC_STUB IOleClientSite_RequestNewObjectLayout_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleObject_INTERFACE_DEFINED__")
cpp_quote("#define __IOleObject_INTERFACE_DEFINED__")
cpp_quote("#ifndef _LPOLEOBJECT_DEFINED")
cpp_quote("#define _LPOLEOBJECT_DEFINED")
cpp_quote("  typedef IOleObject *LPOLEOBJECT;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("  typedef enum tagOLEGETMONIKER {")
cpp_quote("    OLEGETMONIKER_ONLYIFTHERE = 1,OLEGETMONIKER_FORCEASSIGN = 2,OLEGETMONIKER_UNASSIGN = 3,OLEGETMONIKER_TEMPFORUSER = 4")
cpp_quote("  } OLEGETMONIKER;")
cpp_quote("  typedef enum tagOLEWHICHMK {")
cpp_quote("    OLEWHICHMK_CONTAINER = 1,OLEWHICHMK_OBJREL = 2,OLEWHICHMK_OBJFULL = 3")
cpp_quote("  } OLEWHICHMK;")
cpp_quote("")
cpp_quote("  typedef enum tagUSERCLASSTYPE {")
cpp_quote("    USERCLASSTYPE_FULL = 1,USERCLASSTYPE_SHORT = 2,USERCLASSTYPE_APPNAME = 3")
cpp_quote("  } USERCLASSTYPE;")
cpp_quote("")
cpp_quote("  typedef enum tagOLEMISC {")
cpp_quote("    OLEMISC_RECOMPOSEONRESIZE = 0x1,OLEMISC_ONLYICONIC = 0x2,OLEMISC_INSERTNOTREPLACE = 0x4,OLEMISC_STATIC = 0x8,OLEMISC_CANTLINKINSIDE = 0x10,")
cpp_quote("    OLEMISC_CANLINKBYOLE1 = 0x20,OLEMISC_ISLINKOBJECT = 0x40,OLEMISC_INSIDEOUT = 0x80,OLEMISC_ACTIVATEWHENVISIBLE = 0x100,")
cpp_quote("    OLEMISC_RENDERINGISDEVICEINDEPENDENT = 0x200,OLEMISC_INVISIBLEATRUNTIME = 0x400,OLEMISC_ALWAYSRUN = 0x800,OLEMISC_ACTSLIKEBUTTON = 0x1000,")
cpp_quote("    OLEMISC_ACTSLIKELABEL = 0x2000,OLEMISC_NOUIACTIVATE = 0x4000,OLEMISC_ALIGNABLE = 0x8000,OLEMISC_SIMPLEFRAME = 0x10000,")
cpp_quote("    OLEMISC_SETCLIENTSITEFIRST = 0x20000,OLEMISC_IMEMODE = 0x40000,OLEMISC_IGNOREACTIVATEWHENVISIBLE = 0x80000,OLEMISC_WANTSTOMENUMERGE = 0x100000,")
cpp_quote("    OLEMISC_SUPPORTSMULTILEVELUNDO = 0x200000")
cpp_quote("  } OLEMISC;")
cpp_quote("  typedef enum tagOLECLOSE {")
cpp_quote("    OLECLOSE_SAVEIFDIRTY = 0,OLECLOSE_NOSAVE = 1,OLECLOSE_PROMPTSAVE = 2")
cpp_quote("  } OLECLOSE;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IOleObject;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleObject : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI SetClientSite(IOleClientSite *pClientSite) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetClientSite(IOleClientSite **ppClientSite) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetHostNames(LPCOLESTR szContainerApp,LPCOLESTR szContainerObj) = 0;")
cpp_quote("    virtual HRESULT WINAPI Close(DWORD dwSaveOption) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetMoniker(DWORD dwWhichMoniker,IMoniker *pmk) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetMoniker(DWORD dwAssign,DWORD dwWhichMoniker,IMoniker **ppmk) = 0;")
cpp_quote("    virtual HRESULT WINAPI InitFromData(IDataObject *pDataObject,WINBOOL fCreation,DWORD dwReserved) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetClipboardData(DWORD dwReserved,IDataObject **ppDataObject) = 0;")
cpp_quote("    virtual HRESULT WINAPI DoVerb(LONG iVerb,LPMSG lpmsg,IOleClientSite *pActiveSite,LONG lindex,HWND hwndParent,LPCRECT lprcPosRect) = 0;")
cpp_quote("    virtual HRESULT WINAPI EnumVerbs(IEnumOLEVERB **ppEnumOleVerb) = 0;")
cpp_quote("    virtual HRESULT WINAPI Update(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI IsUpToDate(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetUserClassID(CLSID *pClsid) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetUserType(DWORD dwFormOfType,LPOLESTR *pszUserType) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetExtent(DWORD dwDrawAspect,SIZEL *psizel) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetExtent(DWORD dwDrawAspect,SIZEL *psizel) = 0;")
cpp_quote("    virtual HRESULT WINAPI Advise(IAdviseSink *pAdvSink,DWORD *pdwConnection) = 0;")
cpp_quote("    virtual HRESULT WINAPI Unadvise(DWORD dwConnection) = 0;")
cpp_quote("    virtual HRESULT WINAPI EnumAdvise(IEnumSTATDATA **ppenumAdvise) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetMiscStatus(DWORD dwAspect,DWORD *pdwStatus) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetColorScheme(LOGPALETTE *pLogpal) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleObjectVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleObject *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleObject *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleObject *This);")
cpp_quote("      HRESULT (WINAPI *SetClientSite)(IOleObject *This,IOleClientSite *pClientSite);")
cpp_quote("      HRESULT (WINAPI *GetClientSite)(IOleObject *This,IOleClientSite **ppClientSite);")
cpp_quote("      HRESULT (WINAPI *SetHostNames)(IOleObject *This,LPCOLESTR szContainerApp,LPCOLESTR szContainerObj);")
cpp_quote("      HRESULT (WINAPI *Close)(IOleObject *This,DWORD dwSaveOption);")
cpp_quote("      HRESULT (WINAPI *SetMoniker)(IOleObject *This,DWORD dwWhichMoniker,IMoniker *pmk);")
cpp_quote("      HRESULT (WINAPI *GetMoniker)(IOleObject *This,DWORD dwAssign,DWORD dwWhichMoniker,IMoniker **ppmk);")
cpp_quote("      HRESULT (WINAPI *InitFromData)(IOleObject *This,IDataObject *pDataObject,WINBOOL fCreation,DWORD dwReserved);")
cpp_quote("      HRESULT (WINAPI *GetClipboardData)(IOleObject *This,DWORD dwReserved,IDataObject **ppDataObject);")
cpp_quote("      HRESULT (WINAPI *DoVerb)(IOleObject *This,LONG iVerb,LPMSG lpmsg,IOleClientSite *pActiveSite,LONG lindex,HWND hwndParent,LPCRECT lprcPosRect);")
cpp_quote("      HRESULT (WINAPI *EnumVerbs)(IOleObject *This,IEnumOLEVERB **ppEnumOleVerb);")
cpp_quote("      HRESULT (WINAPI *Update)(IOleObject *This);")
cpp_quote("      HRESULT (WINAPI *IsUpToDate)(IOleObject *This);")
cpp_quote("      HRESULT (WINAPI *GetUserClassID)(IOleObject *This,CLSID *pClsid);")
cpp_quote("      HRESULT (WINAPI *GetUserType)(IOleObject *This,DWORD dwFormOfType,LPOLESTR *pszUserType);")
cpp_quote("      HRESULT (WINAPI *SetExtent)(IOleObject *This,DWORD dwDrawAspect,SIZEL *psizel);")
cpp_quote("      HRESULT (WINAPI *GetExtent)(IOleObject *This,DWORD dwDrawAspect,SIZEL *psizel);")
cpp_quote("      HRESULT (WINAPI *Advise)(IOleObject *This,IAdviseSink *pAdvSink,DWORD *pdwConnection);")
cpp_quote("      HRESULT (WINAPI *Unadvise)(IOleObject *This,DWORD dwConnection);")
cpp_quote("      HRESULT (WINAPI *EnumAdvise)(IOleObject *This,IEnumSTATDATA **ppenumAdvise);")
cpp_quote("      HRESULT (WINAPI *GetMiscStatus)(IOleObject *This,DWORD dwAspect,DWORD *pdwStatus);")
cpp_quote("      HRESULT (WINAPI *SetColorScheme)(IOleObject *This,LOGPALETTE *pLogpal);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleObjectVtbl;")
cpp_quote("  struct IOleObject {")
cpp_quote("    CONST_VTBL struct IOleObjectVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleObject_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleObject_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleObject_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleObject_SetClientSite(This,pClientSite) (This)->lpVtbl->SetClientSite(This,pClientSite)")
cpp_quote("#define IOleObject_GetClientSite(This,ppClientSite) (This)->lpVtbl->GetClientSite(This,ppClientSite)")
cpp_quote("#define IOleObject_SetHostNames(This,szContainerApp,szContainerObj) (This)->lpVtbl->SetHostNames(This,szContainerApp,szContainerObj)")
cpp_quote("#define IOleObject_Close(This,dwSaveOption) (This)->lpVtbl->Close(This,dwSaveOption)")
cpp_quote("#define IOleObject_SetMoniker(This,dwWhichMoniker,pmk) (This)->lpVtbl->SetMoniker(This,dwWhichMoniker,pmk)")
cpp_quote("#define IOleObject_GetMoniker(This,dwAssign,dwWhichMoniker,ppmk) (This)->lpVtbl->GetMoniker(This,dwAssign,dwWhichMoniker,ppmk)")
cpp_quote("#define IOleObject_InitFromData(This,pDataObject,fCreation,dwReserved) (This)->lpVtbl->InitFromData(This,pDataObject,fCreation,dwReserved)")
cpp_quote("#define IOleObject_GetClipboardData(This,dwReserved,ppDataObject) (This)->lpVtbl->GetClipboardData(This,dwReserved,ppDataObject)")
cpp_quote("#define IOleObject_DoVerb(This,iVerb,lpmsg,pActiveSite,lindex,hwndParent,lprcPosRect) (This)->lpVtbl->DoVerb(This,iVerb,lpmsg,pActiveSite,lindex,hwndParent,lprcPosRect)")
cpp_quote("#define IOleObject_EnumVerbs(This,ppEnumOleVerb) (This)->lpVtbl->EnumVerbs(This,ppEnumOleVerb)")
cpp_quote("#define IOleObject_Update(This) (This)->lpVtbl->Update(This)")
cpp_quote("#define IOleObject_IsUpToDate(This) (This)->lpVtbl->IsUpToDate(This)")
cpp_quote("#define IOleObject_GetUserClassID(This,pClsid) (This)->lpVtbl->GetUserClassID(This,pClsid)")
cpp_quote("#define IOleObject_GetUserType(This,dwFormOfType,pszUserType) (This)->lpVtbl->GetUserType(This,dwFormOfType,pszUserType)")
cpp_quote("#define IOleObject_SetExtent(This,dwDrawAspect,psizel) (This)->lpVtbl->SetExtent(This,dwDrawAspect,psizel)")
cpp_quote("#define IOleObject_GetExtent(This,dwDrawAspect,psizel) (This)->lpVtbl->GetExtent(This,dwDrawAspect,psizel)")
cpp_quote("#define IOleObject_Advise(This,pAdvSink,pdwConnection) (This)->lpVtbl->Advise(This,pAdvSink,pdwConnection)")
cpp_quote("#define IOleObject_Unadvise(This,dwConnection) (This)->lpVtbl->Unadvise(This,dwConnection)")
cpp_quote("#define IOleObject_EnumAdvise(This,ppenumAdvise) (This)->lpVtbl->EnumAdvise(This,ppenumAdvise)")
cpp_quote("#define IOleObject_GetMiscStatus(This,dwAspect,pdwStatus) (This)->lpVtbl->GetMiscStatus(This,dwAspect,pdwStatus)")
cpp_quote("#define IOleObject_SetColorScheme(This,pLogpal) (This)->lpVtbl->SetColorScheme(This,pLogpal)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleObject_SetClientSite_Proxy(IOleObject *This,IOleClientSite *pClientSite);")
cpp_quote("  void __RPC_STUB IOleObject_SetClientSite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleObject_GetClientSite_Proxy(IOleObject *This,IOleClientSite **ppClientSite);")
cpp_quote("  void __RPC_STUB IOleObject_GetClientSite_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleObject_SetHostNames_Proxy(IOleObject *This,LPCOLESTR szContainerApp,LPCOLESTR szContainerObj);")
cpp_quote("  void __RPC_STUB IOleObject_SetHostNames_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleObject_Close_Proxy(IOleObject *This,DWORD dwSaveOption);")
cpp_quote("  void __RPC_STUB IOleObject_Close_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleObject_SetMoniker_Proxy(IOleObject *This,DWORD dwWhichMoniker,IMoniker *pmk);")
cpp_quote("  void __RPC_STUB IOleObject_SetMoniker_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleObject_GetMoniker_Proxy(IOleObject *This,DWORD dwAssign,DWORD dwWhichMoniker,IMoniker **ppmk);")
cpp_quote("  void __RPC_STUB IOleObject_GetMoniker_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleObject_InitFromData_Proxy(IOleObject *This,IDataObject *pDataObject,WINBOOL fCreation,DWORD dwReserved);")
cpp_quote("  void __RPC_STUB IOleObject_InitFromData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleObject_GetClipboardData_Proxy(IOleObject *This,DWORD dwReserved,IDataObject **ppDataObject);")
cpp_quote("  void __RPC_STUB IOleObject_GetClipboardData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleObject_DoVerb_Proxy(IOleObject *This,LONG iVerb,LPMSG lpmsg,IOleClientSite *pActiveSite,LONG lindex,HWND hwndParent,LPCRECT lprcPosRect);")
cpp_quote("  void __RPC_STUB IOleObject_DoVerb_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleObject_EnumVerbs_Proxy(IOleObject *This,IEnumOLEVERB **ppEnumOleVerb);")
cpp_quote("  void __RPC_STUB IOleObject_EnumVerbs_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleObject_Update_Proxy(IOleObject *This);")
cpp_quote("  void __RPC_STUB IOleObject_Update_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleObject_IsUpToDate_Proxy(IOleObject *This);")
cpp_quote("  void __RPC_STUB IOleObject_IsUpToDate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleObject_GetUserClassID_Proxy(IOleObject *This,CLSID *pClsid);")
cpp_quote("  void __RPC_STUB IOleObject_GetUserClassID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleObject_GetUserType_Proxy(IOleObject *This,DWORD dwFormOfType,LPOLESTR *pszUserType);")
cpp_quote("  void __RPC_STUB IOleObject_GetUserType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleObject_SetExtent_Proxy(IOleObject *This,DWORD dwDrawAspect,SIZEL *psizel);")
cpp_quote("  void __RPC_STUB IOleObject_SetExtent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleObject_GetExtent_Proxy(IOleObject *This,DWORD dwDrawAspect,SIZEL *psizel);")
cpp_quote("  void __RPC_STUB IOleObject_GetExtent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleObject_Advise_Proxy(IOleObject *This,IAdviseSink *pAdvSink,DWORD *pdwConnection);")
cpp_quote("  void __RPC_STUB IOleObject_Advise_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleObject_Unadvise_Proxy(IOleObject *This,DWORD dwConnection);")
cpp_quote("  void __RPC_STUB IOleObject_Unadvise_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleObject_EnumAdvise_Proxy(IOleObject *This,IEnumSTATDATA **ppenumAdvise);")
cpp_quote("  void __RPC_STUB IOleObject_EnumAdvise_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleObject_GetMiscStatus_Proxy(IOleObject *This,DWORD dwAspect,DWORD *pdwStatus);")
cpp_quote("  void __RPC_STUB IOleObject_GetMiscStatus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleObject_SetColorScheme_Proxy(IOleObject *This,LOGPALETTE *pLogpal);")
cpp_quote("  void __RPC_STUB IOleObject_SetColorScheme_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOLETypes_INTERFACE_DEFINED__")
cpp_quote("#define __IOLETypes_INTERFACE_DEFINED__")
cpp_quote("  typedef enum tagOLERENDER {")
cpp_quote("    OLERENDER_NONE = 0,OLERENDER_DRAW = 1,OLERENDER_FORMAT = 2,OLERENDER_ASIS = 3")
cpp_quote("  } OLERENDER;")
cpp_quote("")
cpp_quote("  typedef OLERENDER *LPOLERENDER;")
cpp_quote("")
cpp_quote("  typedef struct tagOBJECTDESCRIPTOR {")
cpp_quote("    ULONG cbSize;")
cpp_quote("    CLSID clsid;")
cpp_quote("    DWORD dwDrawAspect;")
cpp_quote("    SIZEL sizel;")
cpp_quote("    POINTL pointl;")
cpp_quote("    DWORD dwStatus;")
cpp_quote("    DWORD dwFullUserTypeName;")
cpp_quote("    DWORD dwSrcOfCopy;")
cpp_quote("  } OBJECTDESCRIPTOR;")
cpp_quote("")
cpp_quote("  typedef struct tagOBJECTDESCRIPTOR *POBJECTDESCRIPTOR;")
cpp_quote("  typedef struct tagOBJECTDESCRIPTOR *LPOBJECTDESCRIPTOR;")
cpp_quote("  typedef struct tagOBJECTDESCRIPTOR LINKSRCDESCRIPTOR;")
cpp_quote("  typedef struct tagOBJECTDESCRIPTOR *PLINKSRCDESCRIPTOR;")
cpp_quote("  typedef struct tagOBJECTDESCRIPTOR *LPLINKSRCDESCRIPTOR;")
cpp_quote("")
cpp_quote("  extern RPC_IF_HANDLE IOLETypes_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE IOLETypes_v0_0_s_ifspec;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleWindow_INTERFACE_DEFINED__")
cpp_quote("#define __IOleWindow_INTERFACE_DEFINED__")
cpp_quote("  typedef IOleWindow *LPOLEWINDOW;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IOleWindow;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleWindow : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetWindow(HWND *phwnd) = 0;")
cpp_quote("    virtual HRESULT WINAPI ContextSensitiveHelp(WINBOOL fEnterMode) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleWindowVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleWindow *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleWindow *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleWindow *This);")
cpp_quote("      HRESULT (WINAPI *GetWindow)(IOleWindow *This,HWND *phwnd);")
cpp_quote("      HRESULT (WINAPI *ContextSensitiveHelp)(IOleWindow *This,WINBOOL fEnterMode);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleWindowVtbl;")
cpp_quote("  struct IOleWindow {")
cpp_quote("    CONST_VTBL struct IOleWindowVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleWindow_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleWindow_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleWindow_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleWindow_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)")
cpp_quote("#define IOleWindow_ContextSensitiveHelp(This,fEnterMode) (This)->lpVtbl->ContextSensitiveHelp(This,fEnterMode)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleWindow_GetWindow_Proxy(IOleWindow *This,HWND *phwnd);")
cpp_quote("  void __RPC_STUB IOleWindow_GetWindow_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleWindow_ContextSensitiveHelp_Proxy(IOleWindow *This,WINBOOL fEnterMode);")
cpp_quote("  void __RPC_STUB IOleWindow_ContextSensitiveHelp_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleLink_INTERFACE_DEFINED__")
cpp_quote("#define __IOleLink_INTERFACE_DEFINED__")
cpp_quote("  typedef IOleLink *LPOLELINK;")
cpp_quote("")
cpp_quote("  typedef enum tagOLEUPDATE {")
cpp_quote("    OLEUPDATE_ALWAYS = 1,OLEUPDATE_ONCALL = 3")
cpp_quote("  } OLEUPDATE;")
cpp_quote("")
cpp_quote("  typedef OLEUPDATE *LPOLEUPDATE;")
cpp_quote("  typedef OLEUPDATE *POLEUPDATE;")
cpp_quote("")
cpp_quote("  typedef enum tagOLELINKBIND {")
cpp_quote("    OLELINKBIND_EVENIFCLASSDIFF = 1")
cpp_quote("  } OLELINKBIND;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IOleLink;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleLink : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI SetUpdateOptions(DWORD dwUpdateOpt) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetUpdateOptions(DWORD *pdwUpdateOpt) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetSourceMoniker(IMoniker *pmk,REFCLSID rclsid) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetSourceMoniker(IMoniker **ppmk) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetSourceDisplayName(LPCOLESTR pszStatusText) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetSourceDisplayName(LPOLESTR *ppszDisplayName) = 0;")
cpp_quote("    virtual HRESULT WINAPI BindToSource(DWORD bindflags,IBindCtx *pbc) = 0;")
cpp_quote("    virtual HRESULT WINAPI BindIfRunning(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetBoundSource(IUnknown **ppunk) = 0;")
cpp_quote("    virtual HRESULT WINAPI UnbindSource(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI Update(IBindCtx *pbc) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleLinkVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleLink *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleLink *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleLink *This);")
cpp_quote("      HRESULT (WINAPI *SetUpdateOptions)(IOleLink *This,DWORD dwUpdateOpt);")
cpp_quote("      HRESULT (WINAPI *GetUpdateOptions)(IOleLink *This,DWORD *pdwUpdateOpt);")
cpp_quote("      HRESULT (WINAPI *SetSourceMoniker)(IOleLink *This,IMoniker *pmk,REFCLSID rclsid);")
cpp_quote("      HRESULT (WINAPI *GetSourceMoniker)(IOleLink *This,IMoniker **ppmk);")
cpp_quote("      HRESULT (WINAPI *SetSourceDisplayName)(IOleLink *This,LPCOLESTR pszStatusText);")
cpp_quote("      HRESULT (WINAPI *GetSourceDisplayName)(IOleLink *This,LPOLESTR *ppszDisplayName);")
cpp_quote("      HRESULT (WINAPI *BindToSource)(IOleLink *This,DWORD bindflags,IBindCtx *pbc);")
cpp_quote("      HRESULT (WINAPI *BindIfRunning)(IOleLink *This);")
cpp_quote("      HRESULT (WINAPI *GetBoundSource)(IOleLink *This,IUnknown **ppunk);")
cpp_quote("      HRESULT (WINAPI *UnbindSource)(IOleLink *This);")
cpp_quote("      HRESULT (WINAPI *Update)(IOleLink *This,IBindCtx *pbc);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleLinkVtbl;")
cpp_quote("  struct IOleLink {")
cpp_quote("    CONST_VTBL struct IOleLinkVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleLink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleLink_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleLink_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleLink_SetUpdateOptions(This,dwUpdateOpt) (This)->lpVtbl->SetUpdateOptions(This,dwUpdateOpt)")
cpp_quote("#define IOleLink_GetUpdateOptions(This,pdwUpdateOpt) (This)->lpVtbl->GetUpdateOptions(This,pdwUpdateOpt)")
cpp_quote("#define IOleLink_SetSourceMoniker(This,pmk,rclsid) (This)->lpVtbl->SetSourceMoniker(This,pmk,rclsid)")
cpp_quote("#define IOleLink_GetSourceMoniker(This,ppmk) (This)->lpVtbl->GetSourceMoniker(This,ppmk)")
cpp_quote("#define IOleLink_SetSourceDisplayName(This,pszStatusText) (This)->lpVtbl->SetSourceDisplayName(This,pszStatusText)")
cpp_quote("#define IOleLink_GetSourceDisplayName(This,ppszDisplayName) (This)->lpVtbl->GetSourceDisplayName(This,ppszDisplayName)")
cpp_quote("#define IOleLink_BindToSource(This,bindflags,pbc) (This)->lpVtbl->BindToSource(This,bindflags,pbc)")
cpp_quote("#define IOleLink_BindIfRunning(This) (This)->lpVtbl->BindIfRunning(This)")
cpp_quote("#define IOleLink_GetBoundSource(This,ppunk) (This)->lpVtbl->GetBoundSource(This,ppunk)")
cpp_quote("#define IOleLink_UnbindSource(This) (This)->lpVtbl->UnbindSource(This)")
cpp_quote("#define IOleLink_Update(This,pbc) (This)->lpVtbl->Update(This,pbc)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleLink_SetUpdateOptions_Proxy(IOleLink *This,DWORD dwUpdateOpt);")
cpp_quote("  void __RPC_STUB IOleLink_SetUpdateOptions_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleLink_GetUpdateOptions_Proxy(IOleLink *This,DWORD *pdwUpdateOpt);")
cpp_quote("  void __RPC_STUB IOleLink_GetUpdateOptions_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleLink_SetSourceMoniker_Proxy(IOleLink *This,IMoniker *pmk,REFCLSID rclsid);")
cpp_quote("  void __RPC_STUB IOleLink_SetSourceMoniker_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleLink_GetSourceMoniker_Proxy(IOleLink *This,IMoniker **ppmk);")
cpp_quote("  void __RPC_STUB IOleLink_GetSourceMoniker_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleLink_SetSourceDisplayName_Proxy(IOleLink *This,LPCOLESTR pszStatusText);")
cpp_quote("  void __RPC_STUB IOleLink_SetSourceDisplayName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleLink_GetSourceDisplayName_Proxy(IOleLink *This,LPOLESTR *ppszDisplayName);")
cpp_quote("  void __RPC_STUB IOleLink_GetSourceDisplayName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleLink_BindToSource_Proxy(IOleLink *This,DWORD bindflags,IBindCtx *pbc);")
cpp_quote("  void __RPC_STUB IOleLink_BindToSource_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleLink_BindIfRunning_Proxy(IOleLink *This);")
cpp_quote("  void __RPC_STUB IOleLink_BindIfRunning_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleLink_GetBoundSource_Proxy(IOleLink *This,IUnknown **ppunk);")
cpp_quote("  void __RPC_STUB IOleLink_GetBoundSource_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleLink_UnbindSource_Proxy(IOleLink *This);")
cpp_quote("  void __RPC_STUB IOleLink_UnbindSource_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleLink_Update_Proxy(IOleLink *This,IBindCtx *pbc);")
cpp_quote("  void __RPC_STUB IOleLink_Update_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleItemContainer_INTERFACE_DEFINED__")
cpp_quote("#define __IOleItemContainer_INTERFACE_DEFINED__")
cpp_quote("  typedef IOleItemContainer *LPOLEITEMCONTAINER;")
cpp_quote("")
cpp_quote("  typedef enum tagBINDSPEED {")
cpp_quote("    BINDSPEED_INDEFINITE = 1,BINDSPEED_MODERATE = 2,BINDSPEED_IMMEDIATE = 3")
cpp_quote("  } BINDSPEED;")
cpp_quote("")
cpp_quote("  typedef enum tagOLECONTF {")
cpp_quote("    OLECONTF_EMBEDDINGS = 1,OLECONTF_LINKS = 2,OLECONTF_OTHERS = 4,OLECONTF_ONLYUSER = 8,OLECONTF_ONLYIFRUNNING = 16")
cpp_quote("  } OLECONTF;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IOleItemContainer;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleItemContainer : public IOleContainer {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetObject(LPOLESTR pszItem,DWORD dwSpeedNeeded,IBindCtx *pbc,REFIID riid,void **ppvObject) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetObjectStorage(LPOLESTR pszItem,IBindCtx *pbc,REFIID riid,void **ppvStorage) = 0;")
cpp_quote("    virtual HRESULT WINAPI IsRunning(LPOLESTR pszItem) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleItemContainerVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleItemContainer *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleItemContainer *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleItemContainer *This);")
cpp_quote("      HRESULT (WINAPI *ParseDisplayName)(IOleItemContainer *This,IBindCtx *pbc,LPOLESTR pszDisplayName,ULONG *pchEaten,IMoniker **ppmkOut);")
cpp_quote("      HRESULT (WINAPI *EnumObjects)(IOleItemContainer *This,DWORD grfFlags,IEnumUnknown **ppenum);")
cpp_quote("      HRESULT (WINAPI *LockContainer)(IOleItemContainer *This,WINBOOL fLock);")
cpp_quote("      HRESULT (WINAPI *GetObject)(IOleItemContainer *This,LPOLESTR pszItem,DWORD dwSpeedNeeded,IBindCtx *pbc,REFIID riid,void **ppvObject);")
cpp_quote("      HRESULT (WINAPI *GetObjectStorage)(IOleItemContainer *This,LPOLESTR pszItem,IBindCtx *pbc,REFIID riid,void **ppvStorage);")
cpp_quote("      HRESULT (WINAPI *IsRunning)(IOleItemContainer *This,LPOLESTR pszItem);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleItemContainerVtbl;")
cpp_quote("  struct IOleItemContainer {")
cpp_quote("    CONST_VTBL struct IOleItemContainerVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleItemContainer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleItemContainer_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleItemContainer_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleItemContainer_ParseDisplayName(This,pbc,pszDisplayName,pchEaten,ppmkOut) (This)->lpVtbl->ParseDisplayName(This,pbc,pszDisplayName,pchEaten,ppmkOut)")
cpp_quote("#define IOleItemContainer_EnumObjects(This,grfFlags,ppenum) (This)->lpVtbl->EnumObjects(This,grfFlags,ppenum)")
cpp_quote("#define IOleItemContainer_LockContainer(This,fLock) (This)->lpVtbl->LockContainer(This,fLock)")
cpp_quote("#define IOleItemContainer_GetObject(This,pszItem,dwSpeedNeeded,pbc,riid,ppvObject) (This)->lpVtbl->GetObject(This,pszItem,dwSpeedNeeded,pbc,riid,ppvObject)")
cpp_quote("#define IOleItemContainer_GetObjectStorage(This,pszItem,pbc,riid,ppvStorage) (This)->lpVtbl->GetObjectStorage(This,pszItem,pbc,riid,ppvStorage)")
cpp_quote("#define IOleItemContainer_IsRunning(This,pszItem) (This)->lpVtbl->IsRunning(This,pszItem)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleItemContainer_GetObject_Proxy(IOleItemContainer *This,LPOLESTR pszItem,DWORD dwSpeedNeeded,IBindCtx *pbc,REFIID riid,void **ppvObject);")
cpp_quote("  void __RPC_STUB IOleItemContainer_GetObject_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleItemContainer_GetObjectStorage_Proxy(IOleItemContainer *This,LPOLESTR pszItem,IBindCtx *pbc,REFIID riid,void **ppvStorage);")
cpp_quote("  void __RPC_STUB IOleItemContainer_GetObjectStorage_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleItemContainer_IsRunning_Proxy(IOleItemContainer *This,LPOLESTR pszItem);")
cpp_quote("  void __RPC_STUB IOleItemContainer_IsRunning_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleInPlaceUIWindow_INTERFACE_DEFINED__")
cpp_quote("#define __IOleInPlaceUIWindow_INTERFACE_DEFINED__")
cpp_quote("  typedef IOleInPlaceUIWindow *LPOLEINPLACEUIWINDOW;")
cpp_quote("")
cpp_quote("  typedef RECT BORDERWIDTHS;")
cpp_quote("  typedef LPRECT LPBORDERWIDTHS;")
cpp_quote("  typedef LPCRECT LPCBORDERWIDTHS;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IOleInPlaceUIWindow;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleInPlaceUIWindow : public IOleWindow {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetBorder(LPRECT lprectBorder) = 0;")
cpp_quote("    virtual HRESULT WINAPI RequestBorderSpace(LPCBORDERWIDTHS pborderwidths) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetBorderSpace(LPCBORDERWIDTHS pborderwidths) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetActiveObject(IOleInPlaceActiveObject *pActiveObject,LPCOLESTR pszObjName) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleInPlaceUIWindowVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleInPlaceUIWindow *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleInPlaceUIWindow *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleInPlaceUIWindow *This);")
cpp_quote("      HRESULT (WINAPI *GetWindow)(IOleInPlaceUIWindow *This,HWND *phwnd);")
cpp_quote("      HRESULT (WINAPI *ContextSensitiveHelp)(IOleInPlaceUIWindow *This,WINBOOL fEnterMode);")
cpp_quote("      HRESULT (WINAPI *GetBorder)(IOleInPlaceUIWindow *This,LPRECT lprectBorder);")
cpp_quote("      HRESULT (WINAPI *RequestBorderSpace)(IOleInPlaceUIWindow *This,LPCBORDERWIDTHS pborderwidths);")
cpp_quote("      HRESULT (WINAPI *SetBorderSpace)(IOleInPlaceUIWindow *This,LPCBORDERWIDTHS pborderwidths);")
cpp_quote("      HRESULT (WINAPI *SetActiveObject)(IOleInPlaceUIWindow *This,IOleInPlaceActiveObject *pActiveObject,LPCOLESTR pszObjName);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleInPlaceUIWindowVtbl;")
cpp_quote("  struct IOleInPlaceUIWindow {")
cpp_quote("    CONST_VTBL struct IOleInPlaceUIWindowVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleInPlaceUIWindow_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleInPlaceUIWindow_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleInPlaceUIWindow_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleInPlaceUIWindow_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)")
cpp_quote("#define IOleInPlaceUIWindow_ContextSensitiveHelp(This,fEnterMode) (This)->lpVtbl->ContextSensitiveHelp(This,fEnterMode)")
cpp_quote("#define IOleInPlaceUIWindow_GetBorder(This,lprectBorder) (This)->lpVtbl->GetBorder(This,lprectBorder)")
cpp_quote("#define IOleInPlaceUIWindow_RequestBorderSpace(This,pborderwidths) (This)->lpVtbl->RequestBorderSpace(This,pborderwidths)")
cpp_quote("#define IOleInPlaceUIWindow_SetBorderSpace(This,pborderwidths) (This)->lpVtbl->SetBorderSpace(This,pborderwidths)")
cpp_quote("#define IOleInPlaceUIWindow_SetActiveObject(This,pActiveObject,pszObjName) (This)->lpVtbl->SetActiveObject(This,pActiveObject,pszObjName)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleInPlaceUIWindow_GetBorder_Proxy(IOleInPlaceUIWindow *This,LPRECT lprectBorder);")
cpp_quote("  void __RPC_STUB IOleInPlaceUIWindow_GetBorder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceUIWindow_RequestBorderSpace_Proxy(IOleInPlaceUIWindow *This,LPCBORDERWIDTHS pborderwidths);")
cpp_quote("  void __RPC_STUB IOleInPlaceUIWindow_RequestBorderSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceUIWindow_SetBorderSpace_Proxy(IOleInPlaceUIWindow *This,LPCBORDERWIDTHS pborderwidths);")
cpp_quote("  void __RPC_STUB IOleInPlaceUIWindow_SetBorderSpace_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceUIWindow_SetActiveObject_Proxy(IOleInPlaceUIWindow *This,IOleInPlaceActiveObject *pActiveObject,LPCOLESTR pszObjName);")
cpp_quote("  void __RPC_STUB IOleInPlaceUIWindow_SetActiveObject_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleInPlaceActiveObject_INTERFACE_DEFINED__")
cpp_quote("#define __IOleInPlaceActiveObject_INTERFACE_DEFINED__")
cpp_quote("  typedef IOleInPlaceActiveObject *LPOLEINPLACEACTIVEOBJECT;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IOleInPlaceActiveObject;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleInPlaceActiveObject : public IOleWindow {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI TranslateAccelerator(LPMSG lpmsg) = 0;")
cpp_quote("    virtual HRESULT WINAPI OnFrameWindowActivate(WINBOOL fActivate) = 0;")
cpp_quote("    virtual HRESULT WINAPI OnDocWindowActivate(WINBOOL fActivate) = 0;")
cpp_quote("    virtual HRESULT WINAPI ResizeBorder(LPCRECT prcBorder,IOleInPlaceUIWindow *pUIWindow,WINBOOL fFrameWindow) = 0;")
cpp_quote("    virtual HRESULT WINAPI EnableModeless(WINBOOL fEnable) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleInPlaceActiveObjectVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleInPlaceActiveObject *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleInPlaceActiveObject *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleInPlaceActiveObject *This);")
cpp_quote("      HRESULT (WINAPI *GetWindow)(IOleInPlaceActiveObject *This,HWND *phwnd);")
cpp_quote("      HRESULT (WINAPI *ContextSensitiveHelp)(IOleInPlaceActiveObject *This,WINBOOL fEnterMode);")
cpp_quote("      HRESULT (WINAPI *TranslateAccelerator)(IOleInPlaceActiveObject *This,LPMSG lpmsg);")
cpp_quote("      HRESULT (WINAPI *OnFrameWindowActivate)(IOleInPlaceActiveObject *This,WINBOOL fActivate);")
cpp_quote("      HRESULT (WINAPI *OnDocWindowActivate)(IOleInPlaceActiveObject *This,WINBOOL fActivate);")
cpp_quote("      HRESULT (WINAPI *ResizeBorder)(IOleInPlaceActiveObject *This,LPCRECT prcBorder,IOleInPlaceUIWindow *pUIWindow,WINBOOL fFrameWindow);")
cpp_quote("      HRESULT (WINAPI *EnableModeless)(IOleInPlaceActiveObject *This,WINBOOL fEnable);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleInPlaceActiveObjectVtbl;")
cpp_quote("  struct IOleInPlaceActiveObject {")
cpp_quote("    CONST_VTBL struct IOleInPlaceActiveObjectVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleInPlaceActiveObject_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleInPlaceActiveObject_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleInPlaceActiveObject_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleInPlaceActiveObject_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)")
cpp_quote("#define IOleInPlaceActiveObject_ContextSensitiveHelp(This,fEnterMode) (This)->lpVtbl->ContextSensitiveHelp(This,fEnterMode)")
cpp_quote("#define IOleInPlaceActiveObject_TranslateAccelerator(This,lpmsg) (This)->lpVtbl->TranslateAccelerator(This,lpmsg)")
cpp_quote("#define IOleInPlaceActiveObject_OnFrameWindowActivate(This,fActivate) (This)->lpVtbl->OnFrameWindowActivate(This,fActivate)")
cpp_quote("#define IOleInPlaceActiveObject_OnDocWindowActivate(This,fActivate) (This)->lpVtbl->OnDocWindowActivate(This,fActivate)")
cpp_quote("#define IOleInPlaceActiveObject_ResizeBorder(This,prcBorder,pUIWindow,fFrameWindow) (This)->lpVtbl->ResizeBorder(This,prcBorder,pUIWindow,fFrameWindow)")
cpp_quote("#define IOleInPlaceActiveObject_EnableModeless(This,fEnable) (This)->lpVtbl->EnableModeless(This,fEnable)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleInPlaceActiveObject_RemoteTranslateAccelerator_Proxy(IOleInPlaceActiveObject *This);")
cpp_quote("  void __RPC_STUB IOleInPlaceActiveObject_RemoteTranslateAccelerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceActiveObject_OnFrameWindowActivate_Proxy(IOleInPlaceActiveObject *This,WINBOOL fActivate);")
cpp_quote("  void __RPC_STUB IOleInPlaceActiveObject_OnFrameWindowActivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceActiveObject_OnDocWindowActivate_Proxy(IOleInPlaceActiveObject *This,WINBOOL fActivate);")
cpp_quote("  void __RPC_STUB IOleInPlaceActiveObject_OnDocWindowActivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceActiveObject_RemoteResizeBorder_Proxy(IOleInPlaceActiveObject *This,LPCRECT prcBorder,REFIID riid,IOleInPlaceUIWindow *pUIWindow,WINBOOL fFrameWindow);")
cpp_quote("  void __RPC_STUB IOleInPlaceActiveObject_RemoteResizeBorder_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceActiveObject_EnableModeless_Proxy(IOleInPlaceActiveObject *This,WINBOOL fEnable);")
cpp_quote("  void __RPC_STUB IOleInPlaceActiveObject_EnableModeless_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleInPlaceFrame_INTERFACE_DEFINED__")
cpp_quote("#define __IOleInPlaceFrame_INTERFACE_DEFINED__")
cpp_quote("  typedef IOleInPlaceFrame *LPOLEINPLACEFRAME;")
cpp_quote("")
cpp_quote("  typedef struct tagOIFI {")
cpp_quote("    UINT cb;")
cpp_quote("    WINBOOL fMDIApp;")
cpp_quote("    HWND hwndFrame;")
cpp_quote("    HACCEL haccel;")
cpp_quote("    UINT cAccelEntries;")
cpp_quote("  } OLEINPLACEFRAMEINFO;")
cpp_quote("")
cpp_quote("  typedef struct tagOIFI *LPOLEINPLACEFRAMEINFO;")
cpp_quote("")
cpp_quote("  typedef struct tagOleMenuGroupWidths {")
cpp_quote("    LONG width[6 ];")
cpp_quote("  } OLEMENUGROUPWIDTHS;")
cpp_quote("")
cpp_quote("  typedef struct tagOleMenuGroupWidths *LPOLEMENUGROUPWIDTHS;")
cpp_quote("  typedef HGLOBAL HOLEMENU;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IOleInPlaceFrame;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleInPlaceFrame : public IOleInPlaceUIWindow {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI InsertMenus(HMENU hmenuShared,LPOLEMENUGROUPWIDTHS lpMenuWidths) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetMenu(HMENU hmenuShared,HOLEMENU holemenu,HWND hwndActiveObject) = 0;")
cpp_quote("    virtual HRESULT WINAPI RemoveMenus(HMENU hmenuShared) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetStatusText(LPCOLESTR pszStatusText) = 0;")
cpp_quote("    virtual HRESULT WINAPI EnableModeless(WINBOOL fEnable) = 0;")
cpp_quote("    virtual HRESULT WINAPI TranslateAccelerator(LPMSG lpmsg,WORD wID) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleInPlaceFrameVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleInPlaceFrame *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleInPlaceFrame *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleInPlaceFrame *This);")
cpp_quote("      HRESULT (WINAPI *GetWindow)(IOleInPlaceFrame *This,HWND *phwnd);")
cpp_quote("      HRESULT (WINAPI *ContextSensitiveHelp)(IOleInPlaceFrame *This,WINBOOL fEnterMode);")
cpp_quote("      HRESULT (WINAPI *GetBorder)(IOleInPlaceFrame *This,LPRECT lprectBorder);")
cpp_quote("      HRESULT (WINAPI *RequestBorderSpace)(IOleInPlaceFrame *This,LPCBORDERWIDTHS pborderwidths);")
cpp_quote("      HRESULT (WINAPI *SetBorderSpace)(IOleInPlaceFrame *This,LPCBORDERWIDTHS pborderwidths);")
cpp_quote("      HRESULT (WINAPI *SetActiveObject)(IOleInPlaceFrame *This,IOleInPlaceActiveObject *pActiveObject,LPCOLESTR pszObjName);")
cpp_quote("      HRESULT (WINAPI *InsertMenus)(IOleInPlaceFrame *This,HMENU hmenuShared,LPOLEMENUGROUPWIDTHS lpMenuWidths);")
cpp_quote("      HRESULT (WINAPI *SetMenu)(IOleInPlaceFrame *This,HMENU hmenuShared,HOLEMENU holemenu,HWND hwndActiveObject);")
cpp_quote("      HRESULT (WINAPI *RemoveMenus)(IOleInPlaceFrame *This,HMENU hmenuShared);")
cpp_quote("      HRESULT (WINAPI *SetStatusText)(IOleInPlaceFrame *This,LPCOLESTR pszStatusText);")
cpp_quote("      HRESULT (WINAPI *EnableModeless)(IOleInPlaceFrame *This,WINBOOL fEnable);")
cpp_quote("      HRESULT (WINAPI *TranslateAccelerator)(IOleInPlaceFrame *This,LPMSG lpmsg,WORD wID);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleInPlaceFrameVtbl;")
cpp_quote("  struct IOleInPlaceFrame {")
cpp_quote("    CONST_VTBL struct IOleInPlaceFrameVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleInPlaceFrame_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleInPlaceFrame_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleInPlaceFrame_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleInPlaceFrame_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)")
cpp_quote("#define IOleInPlaceFrame_ContextSensitiveHelp(This,fEnterMode) (This)->lpVtbl->ContextSensitiveHelp(This,fEnterMode)")
cpp_quote("#define IOleInPlaceFrame_GetBorder(This,lprectBorder) (This)->lpVtbl->GetBorder(This,lprectBorder)")
cpp_quote("#define IOleInPlaceFrame_RequestBorderSpace(This,pborderwidths) (This)->lpVtbl->RequestBorderSpace(This,pborderwidths)")
cpp_quote("#define IOleInPlaceFrame_SetBorderSpace(This,pborderwidths) (This)->lpVtbl->SetBorderSpace(This,pborderwidths)")
cpp_quote("#define IOleInPlaceFrame_SetActiveObject(This,pActiveObject,pszObjName) (This)->lpVtbl->SetActiveObject(This,pActiveObject,pszObjName)")
cpp_quote("#define IOleInPlaceFrame_InsertMenus(This,hmenuShared,lpMenuWidths) (This)->lpVtbl->InsertMenus(This,hmenuShared,lpMenuWidths)")
cpp_quote("#define IOleInPlaceFrame_SetMenu(This,hmenuShared,holemenu,hwndActiveObject) (This)->lpVtbl->SetMenu(This,hmenuShared,holemenu,hwndActiveObject)")
cpp_quote("#define IOleInPlaceFrame_RemoveMenus(This,hmenuShared) (This)->lpVtbl->RemoveMenus(This,hmenuShared)")
cpp_quote("#define IOleInPlaceFrame_SetStatusText(This,pszStatusText) (This)->lpVtbl->SetStatusText(This,pszStatusText)")
cpp_quote("#define IOleInPlaceFrame_EnableModeless(This,fEnable) (This)->lpVtbl->EnableModeless(This,fEnable)")
cpp_quote("#define IOleInPlaceFrame_TranslateAccelerator(This,lpmsg,wID) (This)->lpVtbl->TranslateAccelerator(This,lpmsg,wID)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleInPlaceFrame_InsertMenus_Proxy(IOleInPlaceFrame *This,HMENU hmenuShared,LPOLEMENUGROUPWIDTHS lpMenuWidths);")
cpp_quote("  void __RPC_STUB IOleInPlaceFrame_InsertMenus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceFrame_SetMenu_Proxy(IOleInPlaceFrame *This,HMENU hmenuShared,HOLEMENU holemenu,HWND hwndActiveObject);")
cpp_quote("  void __RPC_STUB IOleInPlaceFrame_SetMenu_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceFrame_RemoveMenus_Proxy(IOleInPlaceFrame *This,HMENU hmenuShared);")
cpp_quote("  void __RPC_STUB IOleInPlaceFrame_RemoveMenus_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceFrame_SetStatusText_Proxy(IOleInPlaceFrame *This,LPCOLESTR pszStatusText);")
cpp_quote("  void __RPC_STUB IOleInPlaceFrame_SetStatusText_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceFrame_EnableModeless_Proxy(IOleInPlaceFrame *This,WINBOOL fEnable);")
cpp_quote("  void __RPC_STUB IOleInPlaceFrame_EnableModeless_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceFrame_TranslateAccelerator_Proxy(IOleInPlaceFrame *This,LPMSG lpmsg,WORD wID);")
cpp_quote("  void __RPC_STUB IOleInPlaceFrame_TranslateAccelerator_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleInPlaceObject_INTERFACE_DEFINED__")
cpp_quote("#define __IOleInPlaceObject_INTERFACE_DEFINED__")
cpp_quote("  typedef IOleInPlaceObject *LPOLEINPLACEOBJECT;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IOleInPlaceObject;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleInPlaceObject : public IOleWindow {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI InPlaceDeactivate(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI UIDeactivate(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetObjectRects(LPCRECT lprcPosRect,LPCRECT lprcClipRect) = 0;")
cpp_quote("    virtual HRESULT WINAPI ReactivateAndUndo(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleInPlaceObjectVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleInPlaceObject *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleInPlaceObject *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleInPlaceObject *This);")
cpp_quote("      HRESULT (WINAPI *GetWindow)(IOleInPlaceObject *This,HWND *phwnd);")
cpp_quote("      HRESULT (WINAPI *ContextSensitiveHelp)(IOleInPlaceObject *This,WINBOOL fEnterMode);")
cpp_quote("      HRESULT (WINAPI *InPlaceDeactivate)(IOleInPlaceObject *This);")
cpp_quote("      HRESULT (WINAPI *UIDeactivate)(IOleInPlaceObject *This);")
cpp_quote("      HRESULT (WINAPI *SetObjectRects)(IOleInPlaceObject *This,LPCRECT lprcPosRect,LPCRECT lprcClipRect);")
cpp_quote("      HRESULT (WINAPI *ReactivateAndUndo)(IOleInPlaceObject *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleInPlaceObjectVtbl;")
cpp_quote("  struct IOleInPlaceObject {")
cpp_quote("    CONST_VTBL struct IOleInPlaceObjectVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleInPlaceObject_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleInPlaceObject_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleInPlaceObject_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleInPlaceObject_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)")
cpp_quote("#define IOleInPlaceObject_ContextSensitiveHelp(This,fEnterMode) (This)->lpVtbl->ContextSensitiveHelp(This,fEnterMode)")
cpp_quote("#define IOleInPlaceObject_InPlaceDeactivate(This) (This)->lpVtbl->InPlaceDeactivate(This)")
cpp_quote("#define IOleInPlaceObject_UIDeactivate(This) (This)->lpVtbl->UIDeactivate(This)")
cpp_quote("#define IOleInPlaceObject_SetObjectRects(This,lprcPosRect,lprcClipRect) (This)->lpVtbl->SetObjectRects(This,lprcPosRect,lprcClipRect)")
cpp_quote("#define IOleInPlaceObject_ReactivateAndUndo(This) (This)->lpVtbl->ReactivateAndUndo(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleInPlaceObject_InPlaceDeactivate_Proxy(IOleInPlaceObject *This);")
cpp_quote("  void __RPC_STUB IOleInPlaceObject_InPlaceDeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceObject_UIDeactivate_Proxy(IOleInPlaceObject *This);")
cpp_quote("  void __RPC_STUB IOleInPlaceObject_UIDeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceObject_SetObjectRects_Proxy(IOleInPlaceObject *This,LPCRECT lprcPosRect,LPCRECT lprcClipRect);")
cpp_quote("  void __RPC_STUB IOleInPlaceObject_SetObjectRects_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceObject_ReactivateAndUndo_Proxy(IOleInPlaceObject *This);")
cpp_quote("  void __RPC_STUB IOleInPlaceObject_ReactivateAndUndo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IOleInPlaceSite_INTERFACE_DEFINED__")
cpp_quote("#define __IOleInPlaceSite_INTERFACE_DEFINED__")
cpp_quote("  typedef IOleInPlaceSite *LPOLEINPLACESITE;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IOleInPlaceSite;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IOleInPlaceSite : public IOleWindow {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI CanInPlaceActivate(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI OnInPlaceActivate(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI OnUIActivate(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetWindowContext(IOleInPlaceFrame **ppFrame,IOleInPlaceUIWindow **ppDoc,LPRECT lprcPosRect,LPRECT lprcClipRect,LPOLEINPLACEFRAMEINFO lpFrameInfo) = 0;")
cpp_quote("    virtual HRESULT WINAPI Scroll(SIZE scrollExtant) = 0;")
cpp_quote("    virtual HRESULT WINAPI OnUIDeactivate(WINBOOL fUndoable) = 0;")
cpp_quote("    virtual HRESULT WINAPI OnInPlaceDeactivate(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI DiscardUndoState(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI DeactivateAndUndo(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI OnPosRectChange(LPCRECT lprcPosRect) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IOleInPlaceSiteVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IOleInPlaceSite *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IOleInPlaceSite *This);")
cpp_quote("      ULONG (WINAPI *Release)(IOleInPlaceSite *This);")
cpp_quote("      HRESULT (WINAPI *GetWindow)(IOleInPlaceSite *This,HWND *phwnd);")
cpp_quote("      HRESULT (WINAPI *ContextSensitiveHelp)(IOleInPlaceSite *This,WINBOOL fEnterMode);")
cpp_quote("      HRESULT (WINAPI *CanInPlaceActivate)(IOleInPlaceSite *This);")
cpp_quote("      HRESULT (WINAPI *OnInPlaceActivate)(IOleInPlaceSite *This);")
cpp_quote("      HRESULT (WINAPI *OnUIActivate)(IOleInPlaceSite *This);")
cpp_quote("      HRESULT (WINAPI *GetWindowContext)(IOleInPlaceSite *This,IOleInPlaceFrame **ppFrame,IOleInPlaceUIWindow **ppDoc,LPRECT lprcPosRect,LPRECT lprcClipRect,LPOLEINPLACEFRAMEINFO lpFrameInfo);")
cpp_quote("      HRESULT (WINAPI *Scroll)(IOleInPlaceSite *This,SIZE scrollExtant);")
cpp_quote("      HRESULT (WINAPI *OnUIDeactivate)(IOleInPlaceSite *This,WINBOOL fUndoable);")
cpp_quote("      HRESULT (WINAPI *OnInPlaceDeactivate)(IOleInPlaceSite *This);")
cpp_quote("      HRESULT (WINAPI *DiscardUndoState)(IOleInPlaceSite *This);")
cpp_quote("      HRESULT (WINAPI *DeactivateAndUndo)(IOleInPlaceSite *This);")
cpp_quote("      HRESULT (WINAPI *OnPosRectChange)(IOleInPlaceSite *This,LPCRECT lprcPosRect);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IOleInPlaceSiteVtbl;")
cpp_quote("  struct IOleInPlaceSite {")
cpp_quote("    CONST_VTBL struct IOleInPlaceSiteVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IOleInPlaceSite_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IOleInPlaceSite_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IOleInPlaceSite_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IOleInPlaceSite_GetWindow(This,phwnd) (This)->lpVtbl->GetWindow(This,phwnd)")
cpp_quote("#define IOleInPlaceSite_ContextSensitiveHelp(This,fEnterMode) (This)->lpVtbl->ContextSensitiveHelp(This,fEnterMode)")
cpp_quote("#define IOleInPlaceSite_CanInPlaceActivate(This) (This)->lpVtbl->CanInPlaceActivate(This)")
cpp_quote("#define IOleInPlaceSite_OnInPlaceActivate(This) (This)->lpVtbl->OnInPlaceActivate(This)")
cpp_quote("#define IOleInPlaceSite_OnUIActivate(This) (This)->lpVtbl->OnUIActivate(This)")
cpp_quote("#define IOleInPlaceSite_GetWindowContext(This,ppFrame,ppDoc,lprcPosRect,lprcClipRect,lpFrameInfo) (This)->lpVtbl->GetWindowContext(This,ppFrame,ppDoc,lprcPosRect,lprcClipRect,lpFrameInfo)")
cpp_quote("#define IOleInPlaceSite_Scroll(This,scrollExtant) (This)->lpVtbl->Scroll(This,scrollExtant)")
cpp_quote("#define IOleInPlaceSite_OnUIDeactivate(This,fUndoable) (This)->lpVtbl->OnUIDeactivate(This,fUndoable)")
cpp_quote("#define IOleInPlaceSite_OnInPlaceDeactivate(This) (This)->lpVtbl->OnInPlaceDeactivate(This)")
cpp_quote("#define IOleInPlaceSite_DiscardUndoState(This) (This)->lpVtbl->DiscardUndoState(This)")
cpp_quote("#define IOleInPlaceSite_DeactivateAndUndo(This) (This)->lpVtbl->DeactivateAndUndo(This)")
cpp_quote("#define IOleInPlaceSite_OnPosRectChange(This,lprcPosRect) (This)->lpVtbl->OnPosRectChange(This,lprcPosRect)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IOleInPlaceSite_CanInPlaceActivate_Proxy(IOleInPlaceSite *This);")
cpp_quote("  void __RPC_STUB IOleInPlaceSite_CanInPlaceActivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceSite_OnInPlaceActivate_Proxy(IOleInPlaceSite *This);")
cpp_quote("  void __RPC_STUB IOleInPlaceSite_OnInPlaceActivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceSite_OnUIActivate_Proxy(IOleInPlaceSite *This);")
cpp_quote("  void __RPC_STUB IOleInPlaceSite_OnUIActivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceSite_GetWindowContext_Proxy(IOleInPlaceSite *This,IOleInPlaceFrame **ppFrame,IOleInPlaceUIWindow **ppDoc,LPRECT lprcPosRect,LPRECT lprcClipRect,LPOLEINPLACEFRAMEINFO lpFrameInfo);")
cpp_quote("  void __RPC_STUB IOleInPlaceSite_GetWindowContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceSite_Scroll_Proxy(IOleInPlaceSite *This,SIZE scrollExtant);")
cpp_quote("  void __RPC_STUB IOleInPlaceSite_Scroll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceSite_OnUIDeactivate_Proxy(IOleInPlaceSite *This,WINBOOL fUndoable);")
cpp_quote("  void __RPC_STUB IOleInPlaceSite_OnUIDeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceSite_OnInPlaceDeactivate_Proxy(IOleInPlaceSite *This);")
cpp_quote("  void __RPC_STUB IOleInPlaceSite_OnInPlaceDeactivate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceSite_DiscardUndoState_Proxy(IOleInPlaceSite *This);")
cpp_quote("  void __RPC_STUB IOleInPlaceSite_DiscardUndoState_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceSite_DeactivateAndUndo_Proxy(IOleInPlaceSite *This);")
cpp_quote("  void __RPC_STUB IOleInPlaceSite_DeactivateAndUndo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IOleInPlaceSite_OnPosRectChange_Proxy(IOleInPlaceSite *This,LPCRECT lprcPosRect);")
cpp_quote("  void __RPC_STUB IOleInPlaceSite_OnPosRectChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IContinue_INTERFACE_DEFINED__")
cpp_quote("#define __IContinue_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_IContinue;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IContinue : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI FContinue(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IContinueVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IContinue *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IContinue *This);")
cpp_quote("      ULONG (WINAPI *Release)(IContinue *This);")
cpp_quote("      HRESULT (WINAPI *FContinue)(IContinue *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IContinueVtbl;")
cpp_quote("  struct IContinue {")
cpp_quote("    CONST_VTBL struct IContinueVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IContinue_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IContinue_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IContinue_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IContinue_FContinue(This) (This)->lpVtbl->FContinue(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IContinue_FContinue_Proxy(IContinue *This);")
cpp_quote("  void __RPC_STUB IContinue_FContinue_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IViewObject_INTERFACE_DEFINED__")
cpp_quote("#define __IViewObject_INTERFACE_DEFINED__")
cpp_quote("  typedef IViewObject *LPVIEWOBJECT;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IViewObject;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IViewObject : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Draw(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) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetColorSet(DWORD dwDrawAspect,LONG lindex,void *pvAspect,DVTARGETDEVICE *ptd,HDC hicTargetDev,LOGPALETTE **ppColorSet) = 0;")
cpp_quote("    virtual HRESULT WINAPI Freeze(DWORD dwDrawAspect,LONG lindex,void *pvAspect,DWORD *pdwFreeze) = 0;")
cpp_quote("    virtual HRESULT WINAPI Unfreeze(DWORD dwFreeze) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetAdvise(DWORD aspects,DWORD advf,IAdviseSink *pAdvSink) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetAdvise(DWORD *pAspects,DWORD *pAdvf,IAdviseSink **ppAdvSink) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IViewObjectVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IViewObject *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IViewObject *This);")
cpp_quote("      ULONG (WINAPI *Release)(IViewObject *This);")
cpp_quote("      HRESULT (WINAPI *Draw)(IViewObject *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)(IViewObject *This,DWORD dwDrawAspect,LONG lindex,void *pvAspect,DVTARGETDEVICE *ptd,HDC hicTargetDev,LOGPALETTE **ppColorSet);")
cpp_quote("      HRESULT (WINAPI *Freeze)(IViewObject *This,DWORD dwDrawAspect,LONG lindex,void *pvAspect,DWORD *pdwFreeze);")
cpp_quote("      HRESULT (WINAPI *Unfreeze)(IViewObject *This,DWORD dwFreeze);")
cpp_quote("      HRESULT (WINAPI *SetAdvise)(IViewObject *This,DWORD aspects,DWORD advf,IAdviseSink *pAdvSink);")
cpp_quote("      HRESULT (WINAPI *GetAdvise)(IViewObject *This,DWORD *pAspects,DWORD *pAdvf,IAdviseSink **ppAdvSink);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IViewObjectVtbl;")
cpp_quote("  struct IViewObject {")
cpp_quote("    CONST_VTBL struct IViewObjectVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IViewObject_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IViewObject_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IViewObject_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IViewObject_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 IViewObject_GetColorSet(This,dwDrawAspect,lindex,pvAspect,ptd,hicTargetDev,ppColorSet) (This)->lpVtbl->GetColorSet(This,dwDrawAspect,lindex,pvAspect,ptd,hicTargetDev,ppColorSet)")
cpp_quote("#define IViewObject_Freeze(This,dwDrawAspect,lindex,pvAspect,pdwFreeze) (This)->lpVtbl->Freeze(This,dwDrawAspect,lindex,pvAspect,pdwFreeze)")
cpp_quote("#define IViewObject_Unfreeze(This,dwFreeze) (This)->lpVtbl->Unfreeze(This,dwFreeze)")
cpp_quote("#define IViewObject_SetAdvise(This,aspects,advf,pAdvSink) (This)->lpVtbl->SetAdvise(This,aspects,advf,pAdvSink)")
cpp_quote("#define IViewObject_GetAdvise(This,pAspects,pAdvf,ppAdvSink) (This)->lpVtbl->GetAdvise(This,pAspects,pAdvf,ppAdvSink)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IViewObject_RemoteDraw_Proxy(IViewObject *This,DWORD dwDrawAspect,LONG lindex,ULONG_PTR pvAspect,DVTARGETDEVICE *ptd,ULONG_PTR hdcTargetDev,ULONG_PTR hdcDraw,LPCRECTL lprcBounds,LPCRECTL lprcWBounds,IContinue *pContinue);")
cpp_quote("  void __RPC_STUB IViewObject_RemoteDraw_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IViewObject_RemoteGetColorSet_Proxy(IViewObject *This,DWORD dwDrawAspect,LONG lindex,ULONG_PTR pvAspect,DVTARGETDEVICE *ptd,ULONG_PTR hicTargetDev,LOGPALETTE **ppColorSet);")
cpp_quote("  void __RPC_STUB IViewObject_RemoteGetColorSet_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IViewObject_RemoteFreeze_Proxy(IViewObject *This,DWORD dwDrawAspect,LONG lindex,ULONG_PTR pvAspect,DWORD *pdwFreeze);")
cpp_quote("  void __RPC_STUB IViewObject_RemoteFreeze_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IViewObject_Unfreeze_Proxy(IViewObject *This,DWORD dwFreeze);")
cpp_quote("  void __RPC_STUB IViewObject_Unfreeze_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IViewObject_SetAdvise_Proxy(IViewObject *This,DWORD aspects,DWORD advf,IAdviseSink *pAdvSink);")
cpp_quote("  void __RPC_STUB IViewObject_SetAdvise_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IViewObject_RemoteGetAdvise_Proxy(IViewObject *This,DWORD *pAspects,DWORD *pAdvf,IAdviseSink **ppAdvSink);")
cpp_quote("  void __RPC_STUB IViewObject_RemoteGetAdvise_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IViewObject2_INTERFACE_DEFINED__")
cpp_quote("#define __IViewObject2_INTERFACE_DEFINED__")
cpp_quote("  typedef IViewObject2 *LPVIEWOBJECT2;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IViewObject2;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IViewObject2 : public IViewObject {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetExtent(DWORD dwDrawAspect,LONG lindex,DVTARGETDEVICE *ptd,LPSIZEL lpsizel) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IViewObject2Vtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IViewObject2 *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IViewObject2 *This);")
cpp_quote("      ULONG (WINAPI *Release)(IViewObject2 *This);")
cpp_quote("      HRESULT (WINAPI *Draw)(IViewObject2 *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)(IViewObject2 *This,DWORD dwDrawAspect,LONG lindex,void *pvAspect,DVTARGETDEVICE *ptd,HDC hicTargetDev,LOGPALETTE **ppColorSet);")
cpp_quote("      HRESULT (WINAPI *Freeze)(IViewObject2 *This,DWORD dwDrawAspect,LONG lindex,void *pvAspect,DWORD *pdwFreeze);")
cpp_quote("      HRESULT (WINAPI *Unfreeze)(IViewObject2 *This,DWORD dwFreeze);")
cpp_quote("      HRESULT (WINAPI *SetAdvise)(IViewObject2 *This,DWORD aspects,DWORD advf,IAdviseSink *pAdvSink);")
cpp_quote("      HRESULT (WINAPI *GetAdvise)(IViewObject2 *This,DWORD *pAspects,DWORD *pAdvf,IAdviseSink **ppAdvSink);")
cpp_quote("      HRESULT (WINAPI *GetExtent)(IViewObject2 *This,DWORD dwDrawAspect,LONG lindex,DVTARGETDEVICE *ptd,LPSIZEL lpsizel);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IViewObject2Vtbl;")
cpp_quote("  struct IViewObject2 {")
cpp_quote("    CONST_VTBL struct IViewObject2Vtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IViewObject2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IViewObject2_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IViewObject2_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IViewObject2_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 IViewObject2_GetColorSet(This,dwDrawAspect,lindex,pvAspect,ptd,hicTargetDev,ppColorSet) (This)->lpVtbl->GetColorSet(This,dwDrawAspect,lindex,pvAspect,ptd,hicTargetDev,ppColorSet)")
cpp_quote("#define IViewObject2_Freeze(This,dwDrawAspect,lindex,pvAspect,pdwFreeze) (This)->lpVtbl->Freeze(This,dwDrawAspect,lindex,pvAspect,pdwFreeze)")
cpp_quote("#define IViewObject2_Unfreeze(This,dwFreeze) (This)->lpVtbl->Unfreeze(This,dwFreeze)")
cpp_quote("#define IViewObject2_SetAdvise(This,aspects,advf,pAdvSink) (This)->lpVtbl->SetAdvise(This,aspects,advf,pAdvSink)")
cpp_quote("#define IViewObject2_GetAdvise(This,pAspects,pAdvf,ppAdvSink) (This)->lpVtbl->GetAdvise(This,pAspects,pAdvf,ppAdvSink)")
cpp_quote("#define IViewObject2_GetExtent(This,dwDrawAspect,lindex,ptd,lpsizel) (This)->lpVtbl->GetExtent(This,dwDrawAspect,lindex,ptd,lpsizel)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IViewObject2_GetExtent_Proxy(IViewObject2 *This,DWORD dwDrawAspect,LONG lindex,DVTARGETDEVICE *ptd,LPSIZEL lpsizel);")
cpp_quote("  void __RPC_STUB IViewObject2_GetExtent_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IDropSource_INTERFACE_DEFINED__")
cpp_quote("#define __IDropSource_INTERFACE_DEFINED__")
cpp_quote("  typedef IDropSource *LPDROPSOURCE;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IDropSource;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IDropSource : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI QueryContinueDrag(WINBOOL fEscapePressed,DWORD grfKeyState) = 0;")
cpp_quote("    virtual HRESULT WINAPI GiveFeedback(DWORD dwEffect) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IDropSourceVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IDropSource *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IDropSource *This);")
cpp_quote("      ULONG (WINAPI *Release)(IDropSource *This);")
cpp_quote("      HRESULT (WINAPI *QueryContinueDrag)(IDropSource *This,WINBOOL fEscapePressed,DWORD grfKeyState);")
cpp_quote("      HRESULT (WINAPI *GiveFeedback)(IDropSource *This,DWORD dwEffect);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IDropSourceVtbl;")
cpp_quote("  struct IDropSource {")
cpp_quote("    CONST_VTBL struct IDropSourceVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IDropSource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IDropSource_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IDropSource_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IDropSource_QueryContinueDrag(This,fEscapePressed,grfKeyState) (This)->lpVtbl->QueryContinueDrag(This,fEscapePressed,grfKeyState)")
cpp_quote("#define IDropSource_GiveFeedback(This,dwEffect) (This)->lpVtbl->GiveFeedback(This,dwEffect)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IDropSource_QueryContinueDrag_Proxy(IDropSource *This,WINBOOL fEscapePressed,DWORD grfKeyState);")
cpp_quote("  void __RPC_STUB IDropSource_QueryContinueDrag_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IDropSource_GiveFeedback_Proxy(IDropSource *This,DWORD dwEffect);")
cpp_quote("  void __RPC_STUB IDropSource_GiveFeedback_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IDropTarget_INTERFACE_DEFINED__")
cpp_quote("#define __IDropTarget_INTERFACE_DEFINED__")
cpp_quote("  typedef IDropTarget *LPDROPTARGET;")
cpp_quote("")
cpp_quote("#define MK_ALT (0x20)")
cpp_quote("")
cpp_quote("#define DROPEFFECT_NONE (0)")
cpp_quote("#define DROPEFFECT_COPY (1)")
cpp_quote("#define DROPEFFECT_MOVE (2)")
cpp_quote("#define DROPEFFECT_LINK (4)")
cpp_quote("#define DROPEFFECT_SCROLL (0x80000000)")
cpp_quote("#define DD_DEFSCROLLINSET (11)")
cpp_quote("#define DD_DEFSCROLLDELAY (50)")
cpp_quote("#define DD_DEFSCROLLINTERVAL (50)")
cpp_quote("#define DD_DEFDRAGDELAY (200)")
cpp_quote("#define DD_DEFDRAGMINDIST (2)")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IDropTarget;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IDropTarget : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI DragEnter(IDataObject *pDataObj,DWORD grfKeyState,POINTL pt,DWORD *pdwEffect) = 0;")
cpp_quote("    virtual HRESULT WINAPI DragOver(DWORD grfKeyState,POINTL pt,DWORD *pdwEffect) = 0;")
cpp_quote("    virtual HRESULT WINAPI DragLeave(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI Drop(IDataObject *pDataObj,DWORD grfKeyState,POINTL pt,DWORD *pdwEffect) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IDropTargetVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IDropTarget *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IDropTarget *This);")
cpp_quote("      ULONG (WINAPI *Release)(IDropTarget *This);")
cpp_quote("      HRESULT (WINAPI *DragEnter)(IDropTarget *This,IDataObject *pDataObj,DWORD grfKeyState,POINTL pt,DWORD *pdwEffect);")
cpp_quote("      HRESULT (WINAPI *DragOver)(IDropTarget *This,DWORD grfKeyState,POINTL pt,DWORD *pdwEffect);")
cpp_quote("      HRESULT (WINAPI *DragLeave)(IDropTarget *This);")
cpp_quote("      HRESULT (WINAPI *Drop)(IDropTarget *This,IDataObject *pDataObj,DWORD grfKeyState,POINTL pt,DWORD *pdwEffect);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IDropTargetVtbl;")
cpp_quote("  struct IDropTarget {")
cpp_quote("    CONST_VTBL struct IDropTargetVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IDropTarget_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IDropTarget_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IDropTarget_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IDropTarget_DragEnter(This,pDataObj,grfKeyState,pt,pdwEffect) (This)->lpVtbl->DragEnter(This,pDataObj,grfKeyState,pt,pdwEffect)")
cpp_quote("#define IDropTarget_DragOver(This,grfKeyState,pt,pdwEffect) (This)->lpVtbl->DragOver(This,grfKeyState,pt,pdwEffect)")
cpp_quote("#define IDropTarget_DragLeave(This) (This)->lpVtbl->DragLeave(This)")
cpp_quote("#define IDropTarget_Drop(This,pDataObj,grfKeyState,pt,pdwEffect) (This)->lpVtbl->Drop(This,pDataObj,grfKeyState,pt,pdwEffect)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IDropTarget_DragEnter_Proxy(IDropTarget *This,IDataObject *pDataObj,DWORD grfKeyState,POINTL pt,DWORD *pdwEffect);")
cpp_quote("  void __RPC_STUB IDropTarget_DragEnter_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IDropTarget_DragOver_Proxy(IDropTarget *This,DWORD grfKeyState,POINTL pt,DWORD *pdwEffect);")
cpp_quote("  void __RPC_STUB IDropTarget_DragOver_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IDropTarget_DragLeave_Proxy(IDropTarget *This);")
cpp_quote("  void __RPC_STUB IDropTarget_DragLeave_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IDropTarget_Drop_Proxy(IDropTarget *This,IDataObject *pDataObj,DWORD grfKeyState,POINTL pt,DWORD *pdwEffect);")
cpp_quote("  void __RPC_STUB IDropTarget_Drop_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IEnumOLEVERB_INTERFACE_DEFINED__")
cpp_quote("#define __IEnumOLEVERB_INTERFACE_DEFINED__")
cpp_quote("  typedef IEnumOLEVERB *LPENUMOLEVERB;")
cpp_quote("")
cpp_quote("  typedef struct tagOLEVERB {")
cpp_quote("    LONG lVerb;")
cpp_quote("    LPOLESTR lpszVerbName;")
cpp_quote("    DWORD fuFlags;")
cpp_quote("    DWORD grfAttribs;")
cpp_quote("  } OLEVERB;")
cpp_quote("")
cpp_quote("  typedef struct tagOLEVERB *LPOLEVERB;")
cpp_quote("")
cpp_quote("  typedef enum tagOLEVERBATTRIB {")
cpp_quote("    OLEVERBATTRIB_NEVERDIRTIES = 1,OLEVERBATTRIB_ONCONTAINERMENU = 2")
cpp_quote("  } OLEVERBATTRIB;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IEnumOLEVERB;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IEnumOLEVERB : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Next(ULONG celt,LPOLEVERB 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(IEnumOLEVERB **ppenum) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IEnumOLEVERBVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IEnumOLEVERB *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IEnumOLEVERB *This);")
cpp_quote("      ULONG (WINAPI *Release)(IEnumOLEVERB *This);")
cpp_quote("      HRESULT (WINAPI *Next)(IEnumOLEVERB *This,ULONG celt,LPOLEVERB rgelt,ULONG *pceltFetched);")
cpp_quote("      HRESULT (WINAPI *Skip)(IEnumOLEVERB *This,ULONG celt);")
cpp_quote("      HRESULT (WINAPI *Reset)(IEnumOLEVERB *This);")
cpp_quote("      HRESULT (WINAPI *Clone)(IEnumOLEVERB *This,IEnumOLEVERB **ppenum);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IEnumOLEVERBVtbl;")
cpp_quote("  struct IEnumOLEVERB {")
cpp_quote("    CONST_VTBL struct IEnumOLEVERBVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IEnumOLEVERB_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IEnumOLEVERB_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IEnumOLEVERB_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IEnumOLEVERB_Next(This,celt,rgelt,pceltFetched) (This)->lpVtbl->Next(This,celt,rgelt,pceltFetched)")
cpp_quote("#define IEnumOLEVERB_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)")
cpp_quote("#define IEnumOLEVERB_Reset(This) (This)->lpVtbl->Reset(This)")
cpp_quote("#define IEnumOLEVERB_Clone(This,ppenum) (This)->lpVtbl->Clone(This,ppenum)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IEnumOLEVERB_RemoteNext_Proxy(IEnumOLEVERB *This,ULONG celt,LPOLEVERB rgelt,ULONG *pceltFetched);")
cpp_quote("  void __RPC_STUB IEnumOLEVERB_RemoteNext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumOLEVERB_Skip_Proxy(IEnumOLEVERB *This,ULONG celt);")
cpp_quote("  void __RPC_STUB IEnumOLEVERB_Skip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumOLEVERB_Reset_Proxy(IEnumOLEVERB *This);")
cpp_quote("  void __RPC_STUB IEnumOLEVERB_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumOLEVERB_Clone_Proxy(IEnumOLEVERB *This,IEnumOLEVERB **ppenum);")
cpp_quote("  void __RPC_STUB IEnumOLEVERB_Clone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("  unsigned long __RPC_API CLIPFORMAT_UserSize(unsigned long *,unsigned long,CLIPFORMAT *);")
cpp_quote("  unsigned char *__RPC_API CLIPFORMAT_UserMarshal(unsigned long *,unsigned char *,CLIPFORMAT *);")
cpp_quote("  unsigned char *__RPC_API CLIPFORMAT_UserUnmarshal(unsigned long *,unsigned char *,CLIPFORMAT *);")
cpp_quote("  void __RPC_API CLIPFORMAT_UserFree(unsigned long *,CLIPFORMAT *);")
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 HGLOBAL_UserSize(unsigned long *,unsigned long,HGLOBAL *);")
cpp_quote("  unsigned char *__RPC_API HGLOBAL_UserMarshal(unsigned long *,unsigned char *,HGLOBAL *);")
cpp_quote("  unsigned char *__RPC_API HGLOBAL_UserUnmarshal(unsigned long *,unsigned char *,HGLOBAL *);")
cpp_quote("  void __RPC_API HGLOBAL_UserFree(unsigned long *,HGLOBAL *);")
cpp_quote("  unsigned long __RPC_API HMENU_UserSize(unsigned long *,unsigned long,HMENU *);")
cpp_quote("  unsigned char *__RPC_API HMENU_UserMarshal(unsigned long *,unsigned char *,HMENU *);")
cpp_quote("  unsigned char *__RPC_API HMENU_UserUnmarshal(unsigned long *,unsigned char *,HMENU *);")
cpp_quote("  void __RPC_API HMENU_UserFree(unsigned long *,HMENU *);")
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("  unsigned long __RPC_API STGMEDIUM_UserSize(unsigned long *,unsigned long,STGMEDIUM *);")
cpp_quote("  unsigned char *__RPC_API STGMEDIUM_UserMarshal(unsigned long *,unsigned char *,STGMEDIUM *);")
cpp_quote("  unsigned char *__RPC_API STGMEDIUM_UserUnmarshal(unsigned long *,unsigned char *,STGMEDIUM *);")
cpp_quote("  void __RPC_API STGMEDIUM_UserFree(unsigned long *,STGMEDIUM *);")
cpp_quote("")
cpp_quote("  HRESULT WINAPI IOleCache2_UpdateCache_Proxy(IOleCache2 *This,LPDATAOBJECT pDataObject,DWORD grfUpdf,LPVOID pReserved);")
cpp_quote("  HRESULT WINAPI IOleCache2_UpdateCache_Stub(IOleCache2 *This,LPDATAOBJECT pDataObject,DWORD grfUpdf,LONG_PTR pReserved);")
cpp_quote("  HRESULT WINAPI IOleInPlaceActiveObject_TranslateAccelerator_Proxy(IOleInPlaceActiveObject *This,LPMSG lpmsg);")
cpp_quote("  HRESULT WINAPI IOleInPlaceActiveObject_TranslateAccelerator_Stub(IOleInPlaceActiveObject *This);")
cpp_quote("  HRESULT WINAPI IOleInPlaceActiveObject_ResizeBorder_Proxy(IOleInPlaceActiveObject *This,LPCRECT prcBorder,IOleInPlaceUIWindow *pUIWindow,WINBOOL fFrameWindow);")
cpp_quote("  HRESULT WINAPI IOleInPlaceActiveObject_ResizeBorder_Stub(IOleInPlaceActiveObject *This,LPCRECT prcBorder,REFIID riid,IOleInPlaceUIWindow *pUIWindow,WINBOOL fFrameWindow);")
cpp_quote("  HRESULT WINAPI IViewObject_Draw_Proxy(IViewObject *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 IViewObject_Draw_Stub(IViewObject *This,DWORD dwDrawAspect,LONG lindex,ULONG_PTR pvAspect,DVTARGETDEVICE *ptd,ULONG_PTR hdcTargetDev,ULONG_PTR hdcDraw,LPCRECTL lprcBounds,LPCRECTL lprcWBounds,IContinue *pContinue);")
cpp_quote("  HRESULT WINAPI IViewObject_GetColorSet_Proxy(IViewObject *This,DWORD dwDrawAspect,LONG lindex,void *pvAspect,DVTARGETDEVICE *ptd,HDC hicTargetDev,LOGPALETTE **ppColorSet);")
cpp_quote("  HRESULT WINAPI IViewObject_GetColorSet_Stub(IViewObject *This,DWORD dwDrawAspect,LONG lindex,ULONG_PTR pvAspect,DVTARGETDEVICE *ptd,ULONG_PTR hicTargetDev,LOGPALETTE **ppColorSet);")
cpp_quote("  HRESULT WINAPI IViewObject_Freeze_Proxy(IViewObject *This,DWORD dwDrawAspect,LONG lindex,void *pvAspect,DWORD *pdwFreeze);")
cpp_quote("  HRESULT WINAPI IViewObject_Freeze_Stub(IViewObject *This,DWORD dwDrawAspect,LONG lindex,ULONG_PTR pvAspect,DWORD *pdwFreeze);")
cpp_quote("  HRESULT WINAPI IViewObject_GetAdvise_Proxy(IViewObject *This,DWORD *pAspects,DWORD *pAdvf,IAdviseSink **ppAdvSink);")
cpp_quote("  HRESULT WINAPI IViewObject_GetAdvise_Stub(IViewObject *This,DWORD *pAspects,DWORD *pAdvf,IAdviseSink **ppAdvSink);")
cpp_quote("  HRESULT WINAPI IEnumOLEVERB_Next_Proxy(IEnumOLEVERB *This,ULONG celt,LPOLEVERB rgelt,ULONG *pceltFetched);")
cpp_quote("  HRESULT WINAPI IEnumOLEVERB_Next_Stub(IEnumOLEVERB *This,ULONG celt,LPOLEVERB rgelt,ULONG *pceltFetched);")
