#if !defined( _XOBJBASE_H_ ) #define _XOBJBASE_H_ #include #if _MSC_VER > 1000 #pragma once #endif #define __RPC_FAR typedef unsigned char byte; typedef unsigned char boolean; typedef double DOUBLE; #ifdef CONST_VTABLE #define CONST_VTBL const #else #define CONST_VTBL #endif /**************************************************************************** * Special things for VC5 Com support ****************************************************************************/ #ifndef DECLSPEC_SELECTANY #if (_MSC_VER >= 1100) #define DECLSPEC_SELECTANY __declspec(selectany) #else #define DECLSPEC_SELECTANY #endif #endif #ifndef DECLSPEC_NOVTABLE #define DECLSPEC_NOVTABLE #endif #ifndef DECLSPEC_UUID #define DECLSPEC_UUID(x) #endif #define MIDL_INTERFACE(x) struct DECLSPEC_UUID(x) DECLSPEC_NOVTABLE #if _MSC_VER >= 1100 #define EXTERN_GUID(itf,l1,s1,s2,c1,c2,c3,c4,c5,c6,c7,c8) \ EXTERN_C const IID DECLSPEC_SELECTANY itf = {l1,s1,s2,{c1,c2,c3,c4,c5,c6,c7,c8}} #else #define EXTERN_GUID(itf,l1,s1,s2,c1,c2,c3,c4,c5,c6,c7,c8) EXTERN_C const IID itf #endif #include #define WINOLEAPI EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE #define WINOLEAPI_(type) EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE /****** Interface Declaration ***********************************************/ /* * These are macros for declaring interfaces. They exist so that * a single definition of the interface is simulataneously a proper * declaration of the interface structures (C++ abstract classes) * for both C and C++. * * DECLARE_INTERFACE(iface) is used to declare an interface that does * not derive from a base interface. * DECLARE_INTERFACE_(iface, baseiface) is used to declare an interface * that does derive from a base interface. * * By default if the source file has a .c extension the C version of * the interface declaratations will be expanded; if it has a .cpp * extension the C++ version will be expanded. if you want to force * the C version expansion even though the source file has a .cpp * extension, then define the macro "CINTERFACE". * eg. cl -DCINTERFACE file.cpp * * * Example C expansion: * * typedef struct IClassFactory * { * const struct IClassFactoryVtbl FAR* lpVtbl; * } IClassFactory; * * typedef struct IClassFactoryVtbl IClassFactoryVtbl; * * struct IClassFactoryVtbl * { * HRESULT (STDMETHODCALLTYPE * QueryInterface) ( * IClassFactory FAR* This, * IID FAR* riid, * LPVOID FAR* ppvObj) ; * ULONG (STDMETHODCALLTYPE * AddRef) (IClassFactory FAR* This) ; * ULONG (STDMETHODCALLTYPE * Release) (IClassFactory FAR* This) ; * HRESULT (STDMETHODCALLTYPE * CreateInstance) ( * IClassFactory FAR* This, * LPUNKNOWN pUnkOuter, * IID FAR* riid, * LPVOID FAR* ppvObject); * HRESULT (STDMETHODCALLTYPE * LockServer) ( * IClassFactory FAR* This, * BOOL fLock); * }; */ #define interface struct #define STDMETHOD(method) HRESULT (STDMETHODCALLTYPE * method) #define STDMETHOD_(type,method) type (STDMETHODCALLTYPE * method) #define STDMETHODV(method) HRESULT (STDMETHODVCALLTYPE * method) #define STDMETHODV_(type,method) type (STDMETHODVCALLTYPE * method) #if !defined(BEGIN_INTERFACE) #define BEGIN_INTERFACE #define END_INTERFACE #endif #define PURE #define THIS_ INTERFACE FAR* This, #define THIS INTERFACE FAR* This #ifdef CONST_VTABLE #undef CONST_VTBL #define CONST_VTBL const #define DECLARE_INTERFACE(iface) typedef interface iface { \ const struct iface##Vtbl FAR* lpVtbl; \ } iface; \ typedef const struct iface##Vtbl iface##Vtbl; \ const struct iface##Vtbl #else #undef CONST_VTBL #define CONST_VTBL #define DECLARE_INTERFACE(iface) typedef interface iface { \ struct iface##Vtbl FAR* lpVtbl; \ } iface; \ typedef struct iface##Vtbl iface##Vtbl; \ struct iface##Vtbl #endif #define DECLARE_INTERFACE_(iface, baseiface) DECLARE_INTERFACE(iface) /****** Additional basic types **********************************************/ #ifndef FARSTRUCT #define FARSTRUCT #endif // FARSTRUCT #ifndef HUGEP #if defined(_WIN32) || defined(_MPPC_) #define HUGEP #else #define HUGEP __huge #endif // WIN32 #endif // HUGEP #include #define LISet32(li, v) ((li).HighPart = (v) < 0 ? -1 : 0, (li).LowPart = (v)) #define ULISet32(li, v) ((li).HighPart = 0, (li).LowPart = (v)) #if defined(_WIN32) && !defined(OLE2ANSI) typedef WCHAR OLECHAR; typedef /* [string] */ OLECHAR __RPC_FAR *LPOLESTR; typedef /* [string] */ const OLECHAR __RPC_FAR *LPCOLESTR; #define OLESTR(str) L##str #else typedef char OLECHAR; typedef LPSTR LPOLESTR; typedef LPCSTR LPCOLESTR; #define OLESTR(str) str #endif /* Forward Declarations */ #ifndef __IUnknown_FWD_DEFINED__ #define __IUnknown_FWD_DEFINED__ typedef interface IUnknown IUnknown; #endif /* __IUnknown_FWD_DEFINED__ */ #ifndef __IUnknown_INTERFACE_DEFINED__ #define __IUnknown_INTERFACE_DEFINED__ /* interface IUnknown */ /* [unique][uuid][object][local] */ typedef /* [unique] */ IUnknown __RPC_FAR *LPUNKNOWN; typedef /* [unique] */ IUnknown __RPC_FAR *PUNKNOWN; ////////////////////////////////////////////////////////////////// // IID_IUnknown and all other system IIDs are provided in UUID.LIB // Link that library in with your proxies, clients and servers ////////////////////////////////////////////////////////////////// EXTERN_C const IID IID_IUnknown; typedef struct IUnknownVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( IUnknown __RPC_FAR * This, /* [in] */ __in REFIID riid, /* [iid_is][out] */ __deref_out void __RPC_FAR *__RPC_FAR *ppvObject); ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( IUnknown __RPC_FAR * This); ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( IUnknown __RPC_FAR * This); END_INTERFACE } IUnknownVtbl; interface IUnknown { CONST_VTBL struct IUnknownVtbl __RPC_FAR *lpVtbl; }; #define IUnknown_QueryInterface(This,riid,ppvObject) \ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) #define IUnknown_AddRef(This) \ (This)->lpVtbl -> AddRef(This) #define IUnknown_Release(This) \ (This)->lpVtbl -> Release(This) /* interface __MIDL_itf_unknwn_0005 */ /* [local] */ #endif // VC6 hack #ifndef __ISequentialStream_FWD_DEFINED__ #define __ISequentialStream_FWD_DEFINED__ typedef interface ISequentialStream ISequentialStream; #endif /* __ISequentialStream_FWD_DEFINED__ */ #ifndef __ISequentialStream_INTERFACE_DEFINED__ #define __ISequentialStream_INTERFACE_DEFINED__ /* interface ISequentialStream */ /* [unique][uuid][object] */ EXTERN_C const IID IID_ISequentialStream; typedef struct ISequentialStreamVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( ISequentialStream __RPC_FAR * This, /* [in] */ __in REFIID riid, /* [iid_is][out] */ __deref_out void __RPC_FAR *__RPC_FAR *ppvObject); ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( ISequentialStream __RPC_FAR * This); ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( ISequentialStream __RPC_FAR * This); /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Read )( ISequentialStream __RPC_FAR * This, /* [length_is][size_is][out] */ __out_bcount_part_opt(cb, *pcbRead) void __RPC_FAR *pv, /* [in] */ __in ULONG cb, /* [out] */ __out_opt ULONG __RPC_FAR *pcbRead); /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Write )( ISequentialStream __RPC_FAR * This, /* [size_is][in] */ __in_bcount_opt(cb) const void __RPC_FAR *pv, /* [in] */ __in ULONG cb, /* [out] */ __out_opt ULONG __RPC_FAR *pcbWritten); END_INTERFACE } ISequentialStreamVtbl; interface ISequentialStream { CONST_VTBL struct ISequentialStreamVtbl __RPC_FAR *lpVtbl; }; #define ISequentialStream_QueryInterface(This,riid,ppvObject) \ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) #define ISequentialStream_AddRef(This) \ (This)->lpVtbl -> AddRef(This) #define ISequentialStream_Release(This) \ (This)->lpVtbl -> Release(This) #define ISequentialStream_Read(This,pv,cb,pcbRead) \ (This)->lpVtbl -> Read(This,pv,cb,pcbRead) #define ISequentialStream_Write(This,pv,cb,pcbWritten) \ (This)->lpVtbl -> Write(This,pv,cb,pcbWritten) #endif /* __ISequentialStream_INTERFACE_DEFINED__ */ #ifndef __IStream_FWD_DEFINED__ #define __IStream_FWD_DEFINED__ typedef interface IStream IStream; #endif /* __IStream_FWD_DEFINED__ */ #ifndef __IStream_INTERFACE_DEFINED__ #define __IStream_INTERFACE_DEFINED__ /* interface IStream */ /* [unique][uuid][object] */ typedef /* [unique] */ IStream __RPC_FAR *LPSTREAM; typedef struct tagSTATSTG { LPOLESTR pwcsName; DWORD type; ULARGE_INTEGER cbSize; FILETIME mtime; FILETIME ctime; FILETIME atime; DWORD grfMode; DWORD grfLocksSupported; CLSID clsid; DWORD grfStateBits; DWORD reserved; } STATSTG; typedef enum tagSTGTY { STGTY_STORAGE = 1, STGTY_STREAM = 2, STGTY_LOCKBYTES = 3, STGTY_PROPERTY = 4 } STGTY; typedef enum tagSTREAM_SEEK { STREAM_SEEK_SET = 0, STREAM_SEEK_CUR = 1, STREAM_SEEK_END = 2 } STREAM_SEEK; typedef enum tagLOCKTYPE { LOCK_WRITE = 1, LOCK_EXCLUSIVE = 2, LOCK_ONLYONCE = 4 } LOCKTYPE; EXTERN_C const IID IID_IStream; typedef struct IStreamVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( IStream __RPC_FAR * This, /* [in] */ __in REFIID riid, /* [iid_is][out] */ __deref_out void __RPC_FAR *__RPC_FAR *ppvObject); ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( IStream __RPC_FAR * This); ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( IStream __RPC_FAR * This); /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Read )( IStream __RPC_FAR * This, /* [length_is][size_is][out] */ __out_bcount_part_opt(cb, *pcbRead) void __RPC_FAR *pv, /* [in] */ __in ULONG cb, /* [out] */ __out_opt ULONG __RPC_FAR *pcbRead); /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Write )( IStream __RPC_FAR * This, /* [size_is][in] */ __in_bcount_opt(cb) const void __RPC_FAR *pv, /* [in] */ __in ULONG cb, /* [out] */ __out_opt ULONG __RPC_FAR *pcbWritten); /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Seek )( IStream __RPC_FAR * This, /* [in] */ __in LARGE_INTEGER dlibMove, /* [in] */ __in DWORD dwOrigin, /* [out] */ __out_opt ULARGE_INTEGER __RPC_FAR *plibNewPosition); HRESULT ( STDMETHODCALLTYPE __RPC_FAR *SetSize )( IStream __RPC_FAR * This, /* [in] */ __in ULARGE_INTEGER libNewSize); /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *CopyTo )( IStream __RPC_FAR * This, /* [unique][in] */ __in IStream __RPC_FAR *pstm, /* [in] */ __in ULARGE_INTEGER cb, /* [out] */ __out_opt ULARGE_INTEGER __RPC_FAR *pcbRead, /* [out] */ __out_opt ULARGE_INTEGER __RPC_FAR *pcbWritten); HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Commit )( IStream __RPC_FAR * This, /* [in] */ __in DWORD grfCommitFlags); HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Revert )( IStream __RPC_FAR * This); HRESULT ( STDMETHODCALLTYPE __RPC_FAR *LockRegion )( IStream __RPC_FAR * This, /* [in] */ __in ULARGE_INTEGER libOffset, /* [in] */ __in ULARGE_INTEGER cb, /* [in] */ __in DWORD dwLockType); HRESULT ( STDMETHODCALLTYPE __RPC_FAR *UnlockRegion )( IStream __RPC_FAR * This, /* [in] */ __in ULARGE_INTEGER libOffset, /* [in] */ __in ULARGE_INTEGER cb, /* [in] */ __in DWORD dwLockType); HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Stat )( IStream __RPC_FAR * This, /* [out] */ __out STATSTG __RPC_FAR *pstatstg, /* [in] */ __in DWORD grfStatFlag); HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Clone )( IStream __RPC_FAR * This, /* [out] */ __deref_out_opt IStream __RPC_FAR *__RPC_FAR *ppstm); END_INTERFACE } IStreamVtbl; interface IStream { CONST_VTBL struct IStreamVtbl __RPC_FAR *lpVtbl; }; #define IStream_QueryInterface(This,riid,ppvObject) \ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) #define IStream_AddRef(This) \ (This)->lpVtbl -> AddRef(This) #define IStream_Release(This) \ (This)->lpVtbl -> Release(This) #define IStream_Read(This,pv,cb,pcbRead) \ (This)->lpVtbl -> Read(This,pv,cb,pcbRead) #define IStream_Write(This,pv,cb,pcbWritten) \ (This)->lpVtbl -> Write(This,pv,cb,pcbWritten) #define IStream_Seek(This,dlibMove,dwOrigin,plibNewPosition) \ (This)->lpVtbl -> Seek(This,dlibMove,dwOrigin,plibNewPosition) #define IStream_SetSize(This,libNewSize) \ (This)->lpVtbl -> SetSize(This,libNewSize) #define IStream_CopyTo(This,pstm,cb,pcbRead,pcbWritten) \ (This)->lpVtbl -> CopyTo(This,pstm,cb,pcbRead,pcbWritten) #define IStream_Commit(This,grfCommitFlags) \ (This)->lpVtbl -> Commit(This,grfCommitFlags) #define IStream_Revert(This) \ (This)->lpVtbl -> Revert(This) #define IStream_LockRegion(This,libOffset,cb,dwLockType) \ (This)->lpVtbl -> LockRegion(This,libOffset,cb,dwLockType) #define IStream_UnlockRegion(This,libOffset,cb,dwLockType) \ (This)->lpVtbl -> UnlockRegion(This,libOffset,cb,dwLockType) #define IStream_Stat(This,pstatstg,grfStatFlag) \ (This)->lpVtbl -> Stat(This,pstatstg,grfStatFlag) #define IStream_Clone(This,ppstm) \ (This)->lpVtbl -> Clone(This,ppstm) #endif /* __IStream_INTERFACE_DEFINED__ */ #ifndef __IClassFactory_FWD_DEFINED__ #define __IClassFactory_FWD_DEFINED__ typedef interface IClassFactory IClassFactory; #endif /* __IClassFactory_FWD_DEFINED__ */ #ifndef __IClassFactory_INTERFACE_DEFINED__ #define __IClassFactory_INTERFACE_DEFINED__ /* interface IClassFactory */ /* [unique][uuid][object] */ typedef /* [unique] */ IClassFactory __RPC_FAR *LPCLASSFACTORY; EXTERN_C const IID IID_IClassFactory; typedef struct IClassFactoryVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( IClassFactory __RPC_FAR * This, /* [in] */ __in REFIID riid, /* [iid_is][out] */ __deref_out void __RPC_FAR *__RPC_FAR *ppvObject); ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( IClassFactory __RPC_FAR * This); ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( IClassFactory __RPC_FAR * This); /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *CreateInstance )( IClassFactory __RPC_FAR * This, /* [unique][in] */ __in_opt IUnknown __RPC_FAR *pUnkOuter, /* [in] */ __in REFIID riid, /* [iid_is][out] */ __deref_out void __RPC_FAR *__RPC_FAR *ppvObject); /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *LockServer )( IClassFactory __RPC_FAR * This, /* [in] */ __in BOOL fLock); END_INTERFACE } IClassFactoryVtbl; interface IClassFactory { CONST_VTBL struct IClassFactoryVtbl __RPC_FAR *lpVtbl; }; #define IClassFactory_QueryInterface(This,riid,ppvObject) \ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) #define IClassFactory_AddRef(This) \ (This)->lpVtbl -> AddRef(This) #define IClassFactory_Release(This) \ (This)->lpVtbl -> Release(This) #define IClassFactory_CreateInstance(This,pUnkOuter,riid,ppvObject) \ (This)->lpVtbl -> CreateInstance(This,pUnkOuter,riid,ppvObject) #define IClassFactory_LockServer(This,fLock) \ (This)->lpVtbl -> LockServer(This,fLock) #endif /* __IClassFactory_INTERFACE_DEFINED__ */ #ifndef __IPersist_FWD_DEFINED__ #define __IPersist_FWD_DEFINED__ typedef interface IPersist IPersist; #endif /* __IPersist_FWD_DEFINED__ */ #ifndef __IPersist_INTERFACE_DEFINED__ #define __IPersist_INTERFACE_DEFINED__ /* interface IPersist */ /* [uuid][object] */ typedef /* [unique] */ IPersist __RPC_FAR *LPPERSIST; EXTERN_C const IID IID_IPersist; typedef struct IPersistVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( IPersist __RPC_FAR * This, /* [in] */ __in REFIID riid, /* [iid_is][out] */ __deref_out void __RPC_FAR *__RPC_FAR *ppvObject); ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( IPersist __RPC_FAR * This); ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( IPersist __RPC_FAR * This); HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetClassID )( IPersist __RPC_FAR * This, /* [out] */ __out CLSID __RPC_FAR *pClassID); END_INTERFACE } IPersistVtbl; interface IPersist { CONST_VTBL struct IPersistVtbl __RPC_FAR *lpVtbl; }; #define IPersist_QueryInterface(This,riid,ppvObject) \ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) #define IPersist_AddRef(This) \ (This)->lpVtbl -> AddRef(This) #define IPersist_Release(This) \ (This)->lpVtbl -> Release(This) #define IPersist_GetClassID(This,pClassID) \ (This)->lpVtbl -> GetClassID(This,pClassID) #endif /* __IPersist_INTERFACE_DEFINED__ */ #ifndef __IPersistStream_FWD_DEFINED__ #define __IPersistStream_FWD_DEFINED__ typedef interface IPersistStream IPersistStream; #endif /* __IPersistStream_FWD_DEFINED__ */ #ifndef __IPersistStream_INTERFACE_DEFINED__ #define __IPersistStream_INTERFACE_DEFINED__ /* interface IPersistStream */ /* [unique][uuid][object] */ typedef /* [unique] */ IPersistStream __RPC_FAR *LPPERSISTSTREAM; EXTERN_C const IID IID_IPersistStream; typedef struct IPersistStreamVtbl { BEGIN_INTERFACE HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( IPersistStream __RPC_FAR * This, /* [in] */ __in REFIID riid, /* [iid_is][out] */ __deref_out void __RPC_FAR *__RPC_FAR *ppvObject); ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( IPersistStream __RPC_FAR * This); ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( IPersistStream __RPC_FAR * This); HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetClassID )( IPersistStream __RPC_FAR * This, /* [out] */ __out CLSID __RPC_FAR *pClassID); HRESULT ( STDMETHODCALLTYPE __RPC_FAR *IsDirty )( IPersistStream __RPC_FAR * This); HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Load )( IPersistStream __RPC_FAR * This, /* [unique][in] */ __in_opt IStream __RPC_FAR *pStm); HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Save )( IPersistStream __RPC_FAR * This, /* [unique][in] */ __in_opt IStream __RPC_FAR *pStm, /* [in] */ __in BOOL fClearDirty); HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetSizeMax )( IPersistStream __RPC_FAR * This, /* [out] */ __out ULARGE_INTEGER __RPC_FAR *pcbSize); END_INTERFACE } IPersistStreamVtbl; interface IPersistStream { CONST_VTBL struct IPersistStreamVtbl __RPC_FAR *lpVtbl; }; #define IPersistStream_QueryInterface(This,riid,ppvObject) \ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) #define IPersistStream_AddRef(This) \ (This)->lpVtbl -> AddRef(This) #define IPersistStream_Release(This) \ (This)->lpVtbl -> Release(This) #define IPersistStream_GetClassID(This,pClassID) \ (This)->lpVtbl -> GetClassID(This,pClassID) #define IPersistStream_IsDirty(This) \ (This)->lpVtbl -> IsDirty(This) #define IPersistStream_Load(This,pStm) \ (This)->lpVtbl -> Load(This,pStm) #define IPersistStream_Save(This,pStm,fClearDirty) \ (This)->lpVtbl -> Save(This,pStm,fClearDirty) #define IPersistStream_GetSizeMax(This,pcbSize) \ (This)->lpVtbl -> GetSizeMax(This,pcbSize) #endif /* __IPersistStream_INTERFACE_DEFINED__ */ #include #ifndef INITGUID #include #endif #ifndef RC_INVOKED #include #endif // RC_INVOKED #endif // _XOBJBASE_H_