home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 1998 May
/
Pcwk5b98.iso
/
Borland
/
Cplus45
/
BC45
/
BOCOLE.PAK
/
OLEDEBUG.H
< prev
next >
Wrap
C/C++ Source or Header
|
1995-08-29
|
8KB
|
240 lines
//
//**************************************************************************
//
// OleDebug.h -- Some debugging utilities for getting symbolic output
// from the OLE2 error codes and enums
//
// Copyright (c) 1993,94 by Borland International, Inc. All rights reserved
//
//**************************************************************************
#ifndef _OLEDEBUG_H
#define _OLEDEBUG_H
#undef OLEDBG
// to enable the OLEDBG stuff, #define OLEDBG and add oledebug.obj in
// the makefile.
class IUnknownWatcher : public IUnknown
{
public:
IUnknownWatcher( IUnknown *Data, char *Name );
// IUnknown
virtual HRESULT _IFUNC QueryInterface(REFIID iid, void FAR* FAR* pif);
virtual ULONG _IFUNC AddRef();
virtual ULONG _IFUNC Release();
protected:
int nRef();
IUnknown *pUnk;
char Name[40];
};
class IMonikerWatcher : public IMoniker
{
public:
IMonikerWatcher( IMoniker *pMoniker, char *Name );
// *** IUnknown methods ***
virtual HRESULT _IFUNC QueryInterface(REFIID riid, LPVOID FAR* ppvObj);
virtual ULONG _IFUNC AddRef();
virtual ULONG _IFUNC Release();
// *** IPersist methods ***
virtual HRESULT _IFUNC GetClassID(LPCLSID lpClassID);
// *** IPersistStream methods ***
virtual HRESULT _IFUNC IsDirty();
virtual HRESULT _IFUNC Load(LPSTREAM pStm);
virtual HRESULT _IFUNC Save(LPSTREAM pStm, BOOL fClearDirty);
virtual HRESULT _IFUNC GetSizeMax(ULARGE_INTEGER FAR * pcbSize);
// *** IMoniker methods ***
virtual HRESULT _IFUNC BindToObject(LPBC pbc, LPMONIKER pmkToLeft,
REFIID riidResult, LPVOID FAR* ppvResult);
virtual HRESULT _IFUNC BindToStorage(LPBC pbc, LPMONIKER pmkToLeft,
REFIID riid, LPVOID FAR* ppvObj);
virtual HRESULT _IFUNC Reduce(LPBC pbc, DWORD dwReduceHowFar, LPMONIKER FAR*
ppmkToLeft, LPMONIKER FAR * ppmkReduced);
virtual HRESULT _IFUNC ComposeWith(LPMONIKER pmkRight, BOOL fOnlyIfNotGeneric,
LPMONIKER FAR* ppmkComposite);
virtual HRESULT _IFUNC Enum(BOOL fForward, LPENUMMONIKER FAR* ppenumMoniker);
virtual HRESULT _IFUNC IsEqual(LPMONIKER pmkOtherMoniker);
virtual HRESULT _IFUNC Hash(LPDWORD pdwHash);
virtual HRESULT _IFUNC IsRunning(LPBC pbc, LPMONIKER pmkToLeft, LPMONIKER
pmkNewlyRunning);
virtual HRESULT _IFUNC GetTimeOfLastChange(LPBC pbc, LPMONIKER pmkToLeft,
FILETIME FAR* pfiletime);
virtual HRESULT _IFUNC Inverse(LPMONIKER FAR* ppmk);
virtual HRESULT _IFUNC CommonPrefixWith(LPMONIKER pmkOther, LPMONIKER FAR*
ppmkPrefix);
virtual HRESULT _IFUNC RelativePathTo(LPMONIKER pmkOther, LPMONIKER FAR*
ppmkRelPath);
virtual HRESULT _IFUNC GetDisplayName(LPBC pbc, LPMONIKER pmkToLeft,
LPSTR FAR* lplpszDisplayName);
virtual HRESULT _IFUNC ParseDisplayName(LPBC pbc, LPMONIKER pmkToLeft,
LPSTR lpszDisplayName, ULONG FAR* pchEaten,
LPMONIKER FAR* ppmkOut);
virtual HRESULT _IFUNC IsSystemMoniker(LPDWORD pdwMksys);
protected:
IMoniker * pMoniker;
char Name[40];
};
class ReleaseWatcher : public IUnknown
{
public:
ReleaseWatcher( IUnknown *watched ) : Watched( watched ), nRef( 1 ){}
virtual HRESULT _IFUNC QueryInterface(REFIID, LPVOID FAR *);
virtual ULONG _IFUNC AddRef();
virtual ULONG _IFUNC Release();
IUnknown *Watched;
ULONG nRef;
};
#include <assert.h>
#ifdef OLEDBG /* put at end of class in order to not change member offsets */
class _ICLASS cDebug
{
protected:
int DebugMode;
char* DebugClass;
char* DebugFunc;
void DebugEnter(char * dc, char * df, LPOLESTR s);
SCODE DebugReturn(char * dc, char * df, SCODE);
HRESULT DebugReturn(char * dc, char * df, HRESULT);
BOOL DebugReturn(char * dc, char * df, BOOL);
ULONG DebugReturn(char * dc, char * df, LPOLESTR s, ULONG);
void DebugReturn(char * dc, char * df, REFIID, void *);
void DebugExit(char * dc, char * df);
HRESULT DebugHResult(LPOLESTR, HRESULT);
ULONG DebugRefCnt (LPOLESTR, ULONG);
void cdecl DebugPrintf(LPOLESTR, ...);
int SetDebugMode(int m){DebugMode = m; return 1;}
char * prepareBuf (char *);
void DebugPrint (REFIID riid);
void DebugPrint (LPOLESTR pS, const RECT FAR * pR);
void DebugPrint (LPOLESTR pS, const SIZEL FAR * pL);
void DebugPrint (LPOLESTR pS, BOOL f);
cDebug() : DebugMode (1) {}
};
struct cDebugEnumRecord
{
LPOLESTR pEnumS;
WORD eValue;
};
class _ICLASS cDebugEnum
{
cDebugEnumRecord * pEnumRecs;
WORD count;
LPOLESTR pEnumName;
static char enumBuf [200];
public:
cDebugEnum (LPOLESTR pN, cDebugEnumRecord *pR, WORD c) : pEnumName (pN), pEnumRecs (pR), count (c) {}
void Print (DWORD e);
LPOLESTR buf () { return enumBuf; }
};
extern cDebugEnum cOLERENDER;
extern cDebugEnum cOLEVERBATTRIB;
extern cDebugEnum cUSERCLASSTYPE;
extern cDebugEnum cOLEMISC;
extern cDebugEnum cOLECLOSE;
extern cDebugEnum cOLEGETMONIKER;
extern cDebugEnum cOLEWHICHMK;
extern cDebugEnum cBINDSPEED;
extern cDebugEnum cOLECONTF;
extern cDebugEnum cOLEUPDATE;
extern cDebugEnum cOLELINKBIND;
extern cDebugEnum cDVASPECT;
extern cDebugEnum cTYMED;
extern cDebugEnum cDATADIR;
extern cDebugEnum cADVF;
extern cDebugEnum cMEMCTX;
extern cDebugEnum cCLSCTX;
extern cDebugEnum cREGCLS;
extern cDebugEnum cMSHLFLAGS;
extern cDebugEnum cMSHCTX;
extern cDebugEnum cCALLTYPE;
extern cDebugEnum cSERVERCALL;
extern cDebugEnum cPENDINGTYPE;
extern cDebugEnum cPENDINGMSG;
extern cDebugEnum cBIND_FLAGS;
extern cDebugEnum cKSYS;
extern cDebugEnum cMKRREDUCE;
extern cDebugEnum cSTGC;
extern cDebugEnum cSTGTY;
extern cDebugEnum cSTREAM_SEEK;
extern cDebugEnum cLOCKTYPE;
extern cDebugEnum cSTGMOVE;
extern cDebugEnum cSTATFLAG;
extern cDebugEnum cOLEUIPASTEFLAG;
#else
class _ICLASS cDebug;
class _ICLASS cDebugEnum;
#endif
#ifdef OLEDBG
# define OLEIMP(m,a) HRESULT _IFUNC _export OLE_IMPLEMENTATION::m a { \
DebugClass=OLE_INTERFACE; DebugFunc=#m; DebugEnter(OLE_INTERFACE,#m,0);
# define OLEIMPRET(r,m,a) r _IFUNC OLE_IMPLEMENTATION::m a { \
DebugClass=OLE_INTERFACE; DebugFunc=#m; DebugEnter(OLE_INTERFACE,#m,0);
# define OLEENTER DebugEnter(OLE_INTERFACE, OLE_FUNC, NULL);
# define OLEENTERS(s) DebugEnter(OLE_INTERFACE, OLE_FUNC, s);
# define OLERET(s) return ResultFromScode (DebugReturn(OLE_INTERFACE, OLE_FUNC, s))
# define OLERES(r) return DebugReturn(OLE_INTERFACE, OLE_FUNC, r)
# define OLEREF(s, r) return DebugReturn(OLE_INTERFACE, OLE_FUNC, s, r)
# define OLEBRET(b) return DebugReturn(OLE_INTERFACE, OLE_FUNC, b)
# define OLEPRET(id,p) return DebugReturn(OLE_INTERFACE, OLE_FUNC, id, p),p
# define OLEEXIT DebugExit(OLE_INTERFACE, OLE_FUNC)
# define OLEIID(id) DebugPrint (id)
# define OLEHRES(s,r) DebugHResult (s, r)
# define OLEREFCNT(s,r) DebugRefCnt (s,r)
# define OLEPRINTF1(l) DebugPrintf(l)
# define OLEPRINTF2(l1,l2) DebugPrintf(l1,l2)
# define OLEPRINTF3(l1,l2,l3) DebugPrintf(l1,l2,l3)
# define OLEPRINTF4(l1,l2,l3,l4) DebugPrintf(l1,l2,l3,l4)
# define OLEPRINTF5(l1,l2,l3,l4,l5) DebugPrintf(l1,l2,l3,l4,l5)
# define OLEENUM(E,v) E.Print(v);DebugPrintf(E.buf())
#else
# define OLEIMP(m,a) HRESULT _IFUNC _export OLE_IMPLEMENTATION::m a {
# define OLEIMPRET(r,m,a) r _IFUNC OLE_IMPLEMENTATION::m a {
// # define OLEENTER
# define OLEENTER(s)
# define OLEPRINTF1(l)
# define OLEPRINTF2(l1,l2)
# define OLEPRINTF3(l1,l2,l3)
# define OLEPRINTF4(l1,l2,l3,l4)
# define OLEPRINTF5(l1,l2,l3,l4,l5)
# define OLEIID(id)
# define OLEHRES(s,r) (r)
# define OLERET(s) return ResultFromScode (s)
# define OLERES(r) return r
# define OLEREF(s, r) return r
# define OLEREFCNT(s,r) (r)
# define OLEEXIT
# define OLEBRET(b) return b
# define OLEPRET(id,p) return p
# define OLEENUM(E,v)
#endif
#define OLE_INTERFACE DebugClass
#define OLE_FUNC DebugFunc
#endif