481 lines
16 KiB
C
481 lines
16 KiB
C
/*****************************************************************************\
|
|
* *
|
|
* dvobj.h - Data/View object definitions *
|
|
* *
|
|
* OLE Version 2.0 *
|
|
* *
|
|
* Copyright (c) 1992-1993, Microsoft Corp. All rights reserved. *
|
|
* *
|
|
\*****************************************************************************/
|
|
|
|
#if !defined( _DVOBJ_H_ )
|
|
#define _DVOBJ_H_
|
|
|
|
/****** DV value types ******************************************************/
|
|
|
|
// forward type declarations
|
|
#if defined(__cplusplus)
|
|
interface IStorage;
|
|
interface IStream;
|
|
interface IAdviseSink;
|
|
interface IMoniker;
|
|
#else
|
|
typedef interface IStorage IStorage;
|
|
typedef interface IStream IStream;
|
|
typedef interface IAdviseSink IAdviseSink;
|
|
typedef interface IMoniker IMoniker;
|
|
#endif
|
|
|
|
typedef IStorage FAR* LPSTORAGE;
|
|
typedef IStream FAR* LPSTREAM;
|
|
typedef IAdviseSink FAR* LPADVISESINK;
|
|
typedef IMoniker FAR* LPMONIKER;
|
|
|
|
|
|
#if !defined(_MAC)
|
|
typedef WORD CLIPFORMAT;
|
|
#else
|
|
typedef unsigned long CLIPFORMAT; // ResType
|
|
#endif
|
|
typedef CLIPFORMAT FAR* LPCLIPFORMAT;
|
|
|
|
|
|
// Data/View aspect; specifies the desired aspect of the object when
|
|
// drawing or getting data.
|
|
typedef enum tagDVASPECT
|
|
{
|
|
DVASPECT_CONTENT = 1,
|
|
DVASPECT_THUMBNAIL = 2,
|
|
DVASPECT_ICON = 4,
|
|
DVASPECT_DOCPRINT = 8
|
|
} DVASPECT;
|
|
|
|
|
|
// Data/View target device; determines the device for drawing or gettting data
|
|
typedef struct FARSTRUCT tagDVTARGETDEVICE
|
|
{
|
|
DWORD tdSize;
|
|
WORD tdDriverNameOffset;
|
|
WORD tdDeviceNameOffset;
|
|
WORD tdPortNameOffset;
|
|
WORD tdExtDevmodeOffset;
|
|
BYTE tdData[1];
|
|
} DVTARGETDEVICE;
|
|
|
|
|
|
// Format, etc.; completely specifices the kind of data desired, including tymed
|
|
typedef struct FARSTRUCT tagFORMATETC
|
|
{
|
|
CLIPFORMAT cfFormat;
|
|
DVTARGETDEVICE FAR* ptd;
|
|
DWORD dwAspect;
|
|
LONG lindex;
|
|
DWORD tymed;
|
|
} FORMATETC, FAR* LPFORMATETC;
|
|
|
|
|
|
// TYpes of storage MEDiums; determines how data is stored or passed around
|
|
typedef enum tagTYMED
|
|
{
|
|
TYMED_HGLOBAL = 1,
|
|
TYMED_FILE = 2,
|
|
TYMED_ISTREAM = 4,
|
|
TYMED_ISTORAGE = 8,
|
|
TYMED_GDI = 16,
|
|
TYMED_MFPICT = 32,
|
|
TYMED_NULL = 0
|
|
} TYMED;
|
|
|
|
|
|
// DATA format DIRection
|
|
typedef enum tagDATADIR
|
|
{
|
|
DATADIR_GET = 1,
|
|
DATADIR_SET = 2,
|
|
} DATADIR;
|
|
|
|
|
|
// SToraGe MEDIUM; a block of data on a particular medium
|
|
typedef struct FARSTRUCT tagSTGMEDIUM
|
|
{
|
|
DWORD tymed;
|
|
union
|
|
{
|
|
HANDLE hGlobal;
|
|
LPSTR lpszFileName;
|
|
IStream FAR* pstm;
|
|
IStorage FAR* pstg;
|
|
}
|
|
#ifdef NONAMELESSUNION
|
|
u // add a tag when name less unions not supported
|
|
#endif
|
|
;
|
|
IUnknown FAR* pUnkForRelease;
|
|
} STGMEDIUM, FAR* LPSTGMEDIUM;
|
|
|
|
|
|
// Advise Flags
|
|
typedef enum tagADVF
|
|
{
|
|
ADVF_NODATA = 1,
|
|
ADVF_PRIMEFIRST = 2,
|
|
ADVF_ONLYONCE = 4,
|
|
ADVF_DATAONSTOP = 64,
|
|
ADVFCACHE_NOHANDLER = 8,
|
|
ADVFCACHE_FORCEBUILTIN = 16,
|
|
ADVFCACHE_ONSAVE = 32
|
|
} ADVF;
|
|
|
|
|
|
// Stats for data; used by several enumerations and by at least one
|
|
// implementation of IDataAdviseHolder; if a field is not used, it
|
|
// will be NULL.
|
|
typedef struct FARSTRUCT tagSTATDATA
|
|
{ // field used by:
|
|
FORMATETC formatetc; // EnumAdvise, EnumData (cache), EnumFormats
|
|
DWORD advf; // EnumAdvise, EnumData (cache)
|
|
IAdviseSink FAR* pAdvSink; // EnumAdvise
|
|
DWORD dwConnection; // EnumAdvise
|
|
} STATDATA;
|
|
|
|
typedef STATDATA FAR* LPSTATDATA;
|
|
|
|
|
|
|
|
/****** DV Interfaces ***************************************************/
|
|
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IEnumFORMATETC
|
|
|
|
DECLARE_INTERFACE_(IEnumFORMATETC, IUnknown)
|
|
{
|
|
// *** IUnknown methods ***
|
|
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppv) PURE;
|
|
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
|
|
STDMETHOD_(ULONG,Release) (THIS) PURE;
|
|
|
|
// *** IEnumFORMATETC methods ***
|
|
STDMETHOD(Next) (THIS_ ULONG celt, FORMATETC __out FAR * rgelt, ULONG FAR* pceltFetched) PURE;
|
|
STDMETHOD(Skip) (THIS_ ULONG celt) PURE;
|
|
STDMETHOD(Reset) (THIS) PURE;
|
|
STDMETHOD(Clone) (THIS_ IEnumFORMATETC FAR* FAR* ppenum) PURE;
|
|
};
|
|
typedef IEnumFORMATETC FAR* LPENUMFORMATETC;
|
|
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IEnumSTATDATA
|
|
|
|
DECLARE_INTERFACE_(IEnumSTATDATA, IUnknown)
|
|
{
|
|
// *** IUnknown methods ***
|
|
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppv) PURE;
|
|
STDMETHOD_(ULONG, AddRef) (THIS) PURE;
|
|
STDMETHOD_(ULONG, Release) (THIS) PURE;
|
|
|
|
// *** IEnumSTATDATA methods ***
|
|
STDMETHOD(Next) (THIS_ ULONG celt, STATDATA FAR * rgelt, ULONG FAR* pceltFetched) PURE;
|
|
STDMETHOD(Skip) (THIS_ ULONG celt) PURE;
|
|
STDMETHOD(Reset) (THIS) PURE;
|
|
STDMETHOD(Clone) (THIS_ IEnumSTATDATA FAR* FAR* ppenum) PURE;
|
|
};
|
|
typedef IEnumSTATDATA FAR* LPENUMSTATDATA;
|
|
|
|
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IDataObject
|
|
|
|
#define DATA_E_FORMATETC DV_E_FORMATETC
|
|
#define DATA_S_SAMEFORMATETC (DATA_S_FIRST + 0)
|
|
|
|
DECLARE_INTERFACE_(IDataObject, IUnknown)
|
|
{
|
|
// *** IUnknown methods ***
|
|
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
|
|
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
|
|
STDMETHOD_(ULONG, Release) (THIS) PURE;
|
|
|
|
// *** IDataObject methods ***
|
|
STDMETHOD(GetData) (THIS_ __in LPFORMATETC pformatetcIn,
|
|
__out LPSTGMEDIUM pmedium ) PURE;
|
|
STDMETHOD(GetDataHere) (THIS_ __in LPFORMATETC pformatetc,
|
|
__in LPSTGMEDIUM pmedium ) PURE;
|
|
STDMETHOD(QueryGetData) (THIS_ __in LPFORMATETC pformatetc ) PURE;
|
|
STDMETHOD(GetCanonicalFormatEtc) (THIS_ __in LPFORMATETC pformatetc,
|
|
__out LPFORMATETC pformatetcOut) PURE;
|
|
STDMETHOD(SetData) (THIS_ __in LPFORMATETC pformatetc, STGMEDIUM __in FAR * pmedium,
|
|
BOOL fRelease) PURE;
|
|
STDMETHOD(EnumFormatEtc) (THIS_ DWORD dwDirection,
|
|
LPENUMFORMATETC FAR* ppenumFormatEtc) PURE;
|
|
|
|
STDMETHOD(DAdvise) (THIS_ FORMATETC __in FAR* pFormatetc, DWORD advf,
|
|
LPADVISESINK pAdvSink, DWORD FAR* pdwConnection) PURE;
|
|
STDMETHOD(DUnadvise) (THIS_ DWORD dwConnection) PURE;
|
|
STDMETHOD(EnumDAdvise) (THIS_ LPENUMSTATDATA FAR* ppenumAdvise) PURE;
|
|
};
|
|
typedef IDataObject FAR* LPDATAOBJECT;
|
|
|
|
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IViewObject
|
|
|
|
#define VIEW_E_DRAW (VIEW_E_FIRST)
|
|
#define E_DRAW VIEW_E_DRAW
|
|
|
|
#define VIEW_S_ALREADY_FROZEN (VIEW_S_FIRST)
|
|
|
|
DECLARE_INTERFACE_(IViewObject, IUnknown)
|
|
{
|
|
// *** IUnknown methods ***
|
|
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
|
|
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
|
|
STDMETHOD_(ULONG,Release) (THIS) PURE;
|
|
|
|
// *** IViewObject methods ***
|
|
STDMETHOD(Draw) (THIS_ DWORD dwDrawAspect, LONG lindex,
|
|
void FAR* pvAspect, DVTARGETDEVICE FAR * ptd,
|
|
HDC hicTargetDev,
|
|
HDC hdcDraw,
|
|
__in LPCRECTL lprcBounds,
|
|
__in LPCRECTL lprcWBounds,
|
|
BOOL (CALLBACK * pfnContinue) (DWORD),
|
|
DWORD dwContinue) PURE;
|
|
|
|
STDMETHOD(GetColorSet) (THIS_ DWORD dwDrawAspect, LONG lindex,
|
|
void FAR* pvAspect, DVTARGETDEVICE FAR * ptd,
|
|
HDC hicTargetDev,
|
|
LPLOGPALETTE FAR* ppColorSet) PURE;
|
|
|
|
STDMETHOD(Freeze)(THIS_ DWORD dwDrawAspect, LONG lindex,
|
|
void FAR* pvAspect,
|
|
DWORD FAR* pdwFreeze) PURE;
|
|
STDMETHOD(Unfreeze) (THIS_ DWORD dwFreeze) PURE;
|
|
STDMETHOD(SetAdvise) (THIS_ DWORD aspects, DWORD advf,
|
|
LPADVISESINK pAdvSink) PURE;
|
|
STDMETHOD(GetAdvise) (THIS_ DWORD FAR* pAspects, DWORD FAR* pAdvf,
|
|
LPADVISESINK FAR* ppAdvSink) PURE;
|
|
};
|
|
typedef IViewObject FAR* LPVIEWOBJECT;
|
|
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IViewObject2
|
|
|
|
DECLARE_INTERFACE_(IViewObject2, IViewObject)
|
|
{
|
|
// *** IUnknown methods ***
|
|
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
|
|
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
|
|
STDMETHOD_(ULONG,Release) (THIS) PURE;
|
|
|
|
// *** IViewObject methods ***
|
|
STDMETHOD(Draw) (THIS_ DWORD dwDrawAspect, LONG lindex,
|
|
void FAR* pvAspect, DVTARGETDEVICE FAR * ptd,
|
|
HDC hicTargetDev,
|
|
HDC hdcDraw,
|
|
__in LPCRECTL lprcBounds,
|
|
__in LPCRECTL lprcWBounds,
|
|
BOOL (CALLBACK * pfnContinue) (DWORD),
|
|
DWORD dwContinue) PURE;
|
|
|
|
STDMETHOD(GetColorSet) (THIS_ DWORD dwDrawAspect, LONG lindex,
|
|
void FAR* pvAspect, DVTARGETDEVICE FAR * ptd,
|
|
HDC hicTargetDev,
|
|
LPLOGPALETTE FAR* ppColorSet) PURE;
|
|
|
|
STDMETHOD(Freeze)(THIS_ DWORD dwDrawAspect, LONG lindex,
|
|
void FAR* pvAspect,
|
|
DWORD FAR* pdwFreeze) PURE;
|
|
STDMETHOD(Unfreeze) (THIS_ DWORD dwFreeze) PURE;
|
|
STDMETHOD(SetAdvise) (THIS_ DWORD aspects, DWORD advf,
|
|
LPADVISESINK pAdvSink) PURE;
|
|
STDMETHOD(GetAdvise) (THIS_ DWORD FAR* pAspects, DWORD FAR* pAdvf,
|
|
LPADVISESINK FAR* ppAdvSink) PURE;
|
|
|
|
// *** IViewObject2 methods ***
|
|
STDMETHOD(GetExtent) (THIS_ DWORD dwDrawAspect, LONG lindex,
|
|
DVTARGETDEVICE FAR * ptd, __out LPSIZEL lpsizel) PURE;
|
|
|
|
};
|
|
typedef IViewObject2 FAR* LPVIEWOBJECT2;
|
|
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IAdviseSink
|
|
|
|
DECLARE_INTERFACE_(IAdviseSink, IUnknown)
|
|
{
|
|
// *** IUnknown methods ***
|
|
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppv) PURE;
|
|
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
|
|
STDMETHOD_(ULONG,Release) (THIS) PURE;
|
|
|
|
// *** IAdviseSink methods ***
|
|
STDMETHOD_(void,OnDataChange)(THIS_ FORMATETC FAR __in * pFormatetc,
|
|
STGMEDIUM FAR __in * pStgmed) PURE;
|
|
STDMETHOD_(void,OnViewChange)(THIS_ DWORD dwAspect, LONG lindex) PURE;
|
|
STDMETHOD_(void,OnRename)(THIS_ LPMONIKER pmk) PURE;
|
|
STDMETHOD_(void,OnSave)(THIS) PURE;
|
|
STDMETHOD_(void,OnClose)(THIS) PURE;
|
|
};
|
|
typedef IAdviseSink FAR* LPADVISESINK;
|
|
|
|
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IAdviseSink2
|
|
|
|
DECLARE_INTERFACE_(IAdviseSink2, IAdviseSink)
|
|
{
|
|
// *** IUnknown methods ***
|
|
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppv) PURE;
|
|
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
|
|
STDMETHOD_(ULONG,Release) (THIS) PURE;
|
|
|
|
// *** IAdviseSink methods ***
|
|
STDMETHOD_(void,OnDataChange)(THIS_ FORMATETC FAR __in * pFormatetc,
|
|
STGMEDIUM FAR __in * pStgmed) PURE;
|
|
STDMETHOD_(void,OnViewChange)(THIS_ DWORD dwAspect, LONG lindex) PURE;
|
|
STDMETHOD_(void,OnRename)(THIS_ LPMONIKER pmk) PURE;
|
|
STDMETHOD_(void,OnSave)(THIS) PURE;
|
|
STDMETHOD_(void,OnClose)(THIS) PURE;
|
|
|
|
// *** IAdviseSink2 methods ***
|
|
STDMETHOD_(void,OnLinkSrcChange)(THIS_ LPMONIKER pmk) PURE;
|
|
};
|
|
typedef IAdviseSink2 FAR* LPADVISESINK2;
|
|
|
|
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IDataAdviseHolder
|
|
|
|
DECLARE_INTERFACE_(IDataAdviseHolder, IUnknown)
|
|
{
|
|
// *** IUnknown methods ***
|
|
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppv) PURE;
|
|
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
|
|
STDMETHOD_(ULONG,Release) (THIS) PURE;
|
|
|
|
// *** IDataAdviseHolder methods ***
|
|
STDMETHOD(Advise)(THIS_ LPDATAOBJECT pDataObject, FORMATETC FAR __in * pFetc,
|
|
DWORD advf, LPADVISESINK pAdvise, DWORD FAR* pdwConnection) PURE;
|
|
STDMETHOD(Unadvise)(THIS_ DWORD dwConnection) PURE;
|
|
STDMETHOD(EnumAdvise)(THIS_ LPENUMSTATDATA FAR* ppenumAdvise) PURE;
|
|
|
|
STDMETHOD(SendOnDataChange)(THIS_ LPDATAOBJECT pDataObject, DWORD dwReserved, DWORD advf) PURE;
|
|
};
|
|
typedef IDataAdviseHolder FAR* LPDATAADVISEHOLDER;
|
|
|
|
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IOleCache
|
|
|
|
#define CACHE_E_NOCACHE_UPDATED (CACHE_E_FIRST)
|
|
|
|
#define CACHE_S_FORMATETC_NOTSUPPORTED (CACHE_S_FIRST)
|
|
#define CACHE_S_SAMECACHE (CACHE_S_FIRST+1)
|
|
#define CACHE_S_SOMECACHES_NOTUPDATED (CACHE_S_FIRST+2)
|
|
|
|
|
|
DECLARE_INTERFACE_(IOleCache, IUnknown)
|
|
{
|
|
// *** IUnknown methods ***
|
|
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
|
|
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
|
|
STDMETHOD_(ULONG,Release) (THIS) PURE;
|
|
|
|
// *** IOleCache methods ***
|
|
STDMETHOD(Cache) (THIS_ __in LPFORMATETC lpFormatetc, DWORD advf, LPDWORD lpdwConnection) PURE;
|
|
STDMETHOD(Uncache) (THIS_ DWORD dwConnection) PURE;
|
|
STDMETHOD(EnumCache) (THIS_ LPENUMSTATDATA FAR* ppenumStatData) PURE;
|
|
STDMETHOD(InitCache) (THIS_ LPDATAOBJECT pDataObject) PURE;
|
|
STDMETHOD(SetData) (THIS_ __in LPFORMATETC pformatetc, STGMEDIUM FAR __in * pmedium,
|
|
BOOL fRelease) PURE;
|
|
};
|
|
typedef IOleCache FAR* LPOLECACHE;
|
|
|
|
|
|
|
|
// Cache update Flags
|
|
|
|
#define UPDFCACHE_NODATACACHE 0x00000001
|
|
#define UPDFCACHE_ONSAVECACHE 0x00000002
|
|
#define UPDFCACHE_ONSTOPCACHE 0x00000004
|
|
#define UPDFCACHE_NORMALCACHE 0x00000008
|
|
#define UPDFCACHE_IFBLANK 0x00000010
|
|
#define UPDFCACHE_ONLYIFBLANK 0x80000000
|
|
|
|
#define UPDFCACHE_IFBLANKORONSAVECACHE (UPDFCACHE_IFBLANK | UPDFCACHE_ONSAVECACHE )
|
|
#define UPDFCACHE_ALL (~UPDFCACHE_ONLYIFBLANK)
|
|
#define UPDFCACHE_ALLBUTNODATACACHE (UPDFCACHE_ALL & ~UPDFCACHE_NODATACACHE)
|
|
|
|
|
|
// IOleCache2::DiscardCache options
|
|
typedef enum tagDISCARDCACHE
|
|
{
|
|
DISCARDCACHE_SAVEIFDIRTY = 0, // Save all dirty cache before discarding
|
|
DISCARDCACHE_NOSAVE = 1 // Don't save dirty caches before
|
|
// discarding
|
|
} DISCARDCACHE;
|
|
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IOleCache2
|
|
|
|
DECLARE_INTERFACE_(IOleCache2, IOleCache)
|
|
{
|
|
// *** IUnknown methods ***
|
|
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
|
|
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
|
|
STDMETHOD_(ULONG, Release) (THIS) PURE;
|
|
|
|
// *** IOleCache methods ***
|
|
STDMETHOD(Cache) (THIS_ __in LPFORMATETC lpFormatetc, DWORD advf, LPDWORD lpdwConnection) PURE;
|
|
STDMETHOD(Uncache) (THIS_ DWORD dwConnection) PURE;
|
|
STDMETHOD(EnumCache) (THIS_ LPENUMSTATDATA FAR* ppenumStatData) PURE;
|
|
STDMETHOD(InitCache) (THIS_ LPDATAOBJECT pDataObject) PURE;
|
|
STDMETHOD(SetData) (THIS_ __in LPFORMATETC pformatetc, STGMEDIUM FAR __in * pmedium,
|
|
BOOL fRelease) PURE;
|
|
|
|
// *** IOleCache2 methods ***
|
|
STDMETHOD(UpdateCache) (THIS_ LPDATAOBJECT pDataObject, DWORD grfUpdf,
|
|
LPVOID pReserved) PURE;
|
|
STDMETHOD(DiscardCache) (THIS_ DWORD dwDiscardOptions) PURE;
|
|
|
|
};
|
|
typedef IOleCache2 FAR* LPOLECACHE2;
|
|
|
|
|
|
#undef INTERFACE
|
|
#define INTERFACE IOleCacheControl
|
|
|
|
DECLARE_INTERFACE_(IOleCacheControl, IUnknown)
|
|
{
|
|
// *** IUnknown methods ***
|
|
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
|
|
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
|
|
STDMETHOD_(ULONG, Release) (THIS) PURE;
|
|
|
|
// *** IDataObject methods ***
|
|
STDMETHOD(OnRun) (THIS_ LPDATAOBJECT pDataObject) PURE;
|
|
STDMETHOD(OnStop) (THIS) PURE;
|
|
};
|
|
typedef IOleCacheControl FAR* LPOLECACHECONTROL;
|
|
|
|
|
|
|
|
/****** DV APIs ***********************************************************/
|
|
|
|
|
|
STDAPI CreateDataAdviseHolder(LPDATAADVISEHOLDER FAR* ppDAHolder);
|
|
|
|
STDAPI CreateDataCache(LPUNKNOWN pUnkOuter, REFCLSID rclsid,
|
|
REFIID iid, LPVOID FAR* ppv);
|
|
|
|
#endif // _DVOBJ_H_
|