373 lines
9.1 KiB
C++
373 lines
9.1 KiB
C++
|
/*************************************************************************
|
||
|
**
|
||
|
** OLE 2.0 Common Utilities
|
||
|
**
|
||
|
** dbgutil.h
|
||
|
**
|
||
|
** This file contains file contains functions to support debug output.
|
||
|
**
|
||
|
** (c) Copyright Microsoft Corp. 1990 - 1992 All Rights Reserved
|
||
|
**
|
||
|
*************************************************************************/
|
||
|
|
||
|
#include "precomp.h"
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
|
||
|
static int s_nDbgIndent = 0; // indent level for debug message
|
||
|
static int s_nDbgLevel = 0; // default dbg level printed
|
||
|
|
||
|
STDAPI_(void) OleDbgPrint(
|
||
|
int nDbgLvl,
|
||
|
LPTSTR lpszPrefix,
|
||
|
LPTSTR lpszMsg,
|
||
|
int nIndent)
|
||
|
{
|
||
|
if (nDbgLvl <= s_nDbgLevel)
|
||
|
OleDbgPrintAlways(lpszPrefix, lpszMsg, nIndent);
|
||
|
}
|
||
|
|
||
|
STDAPI_(void) OleDbgPrintAlways(LPTSTR lpszPrefix, LPTSTR lpszMsg, int nIndent)
|
||
|
{
|
||
|
if (nIndent < 0)
|
||
|
OleDbgIndent(nIndent);
|
||
|
|
||
|
if (lpszPrefix && *lpszPrefix != '\0')
|
||
|
{
|
||
|
OutputDebugString(TEXT("| "));
|
||
|
for (int i = 0; i < s_nDbgIndent; i++)
|
||
|
OutputDebugString(TEXT("----"));
|
||
|
|
||
|
OutputDebugString(lpszPrefix);
|
||
|
OutputDebugString(TEXT(": "));
|
||
|
}
|
||
|
|
||
|
OutputDebugString(lpszMsg);
|
||
|
if (nIndent > 0)
|
||
|
OleDbgIndent(nIndent);
|
||
|
}
|
||
|
|
||
|
STDAPI_(void) OleDbgSetDbgLevel(int nDbgLvl)
|
||
|
{
|
||
|
s_nDbgLevel = nDbgLvl;
|
||
|
}
|
||
|
|
||
|
STDAPI_(int) OleDbgGetDbgLevel( void )
|
||
|
{
|
||
|
return s_nDbgLevel;
|
||
|
}
|
||
|
|
||
|
STDAPI_(void) OleDbgIndent(int n)
|
||
|
{
|
||
|
switch (n)
|
||
|
{
|
||
|
case -1:
|
||
|
s_nDbgIndent--;
|
||
|
break;
|
||
|
case 1:
|
||
|
s_nDbgIndent++;
|
||
|
break;
|
||
|
case -2:
|
||
|
s_nDbgIndent = 0;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
STDAPI_(void) OleDbgPrintRefCnt(
|
||
|
int nDbgLvl,
|
||
|
LPTSTR lpszPrefix,
|
||
|
LPTSTR lpszMsg,
|
||
|
LPVOID lpObj,
|
||
|
ULONG refcnt)
|
||
|
{
|
||
|
if (nDbgLvl <= s_nDbgLevel)
|
||
|
OleDbgPrintRefCntAlways(lpszPrefix, lpszMsg, lpObj, refcnt);
|
||
|
}
|
||
|
|
||
|
|
||
|
STDAPI_(void) OleDbgPrintRefCntAlways(
|
||
|
LPTSTR lpszPrefix,
|
||
|
LPTSTR lpszMsg,
|
||
|
LPVOID lpObj,
|
||
|
ULONG refcnt)
|
||
|
{
|
||
|
TCHAR szBuf[256];
|
||
|
wsprintf(szBuf, TEXT("[obj=(0x%lx) cnt=%ld] %s"), lpObj, refcnt, lpszMsg);
|
||
|
OleDbgPrintAlways(lpszPrefix, szBuf, 0);
|
||
|
}
|
||
|
|
||
|
STDAPI_(void) OleDbgPrintRect(
|
||
|
int nDbgLvl,
|
||
|
LPTSTR lpszPrefix,
|
||
|
LPTSTR lpszMsg,
|
||
|
LPRECT lpRect)
|
||
|
{
|
||
|
if (nDbgLvl <= s_nDbgLevel)
|
||
|
OleDbgPrintRectAlways(lpszPrefix, lpszMsg, lpRect);
|
||
|
}
|
||
|
|
||
|
|
||
|
STDAPI_(void) OleDbgPrintRectAlways(
|
||
|
LPTSTR lpszPrefix,
|
||
|
LPTSTR lpszMsg,
|
||
|
LPRECT lpRect)
|
||
|
{
|
||
|
TCHAR szBuf[256];
|
||
|
wsprintf(
|
||
|
szBuf,
|
||
|
TEXT("%s: (%d,%d)-(%d,%d) %dx%d\r\n"),
|
||
|
lpszMsg,
|
||
|
lpRect->left,
|
||
|
lpRect->top,
|
||
|
lpRect->right,
|
||
|
lpRect->bottom,
|
||
|
(lpRect->right-lpRect->left),
|
||
|
(lpRect->bottom-lpRect->top)
|
||
|
);
|
||
|
OleDbgPrintAlways(lpszPrefix, szBuf, 0);
|
||
|
}
|
||
|
|
||
|
|
||
|
#define CASE_SCODE(sc) \
|
||
|
case sc: \
|
||
|
pszErrName = TEXT(#sc); \
|
||
|
break;
|
||
|
|
||
|
STDAPI_(void) OleDbgPrintScodeAlways(LPTSTR lpszPrefix, LPTSTR lpszMsg, SCODE sc)
|
||
|
{
|
||
|
const TCHAR* pszErrName;
|
||
|
|
||
|
switch (sc)
|
||
|
{
|
||
|
/* SCODE's defined in SCODE.H */
|
||
|
|
||
|
CASE_SCODE(S_OK)
|
||
|
CASE_SCODE(S_FALSE)
|
||
|
CASE_SCODE(E_UNEXPECTED)
|
||
|
CASE_SCODE(E_OUTOFMEMORY)
|
||
|
CASE_SCODE(E_INVALIDARG)
|
||
|
CASE_SCODE(E_NOINTERFACE)
|
||
|
CASE_SCODE(E_POINTER)
|
||
|
CASE_SCODE(E_HANDLE)
|
||
|
CASE_SCODE(E_ABORT)
|
||
|
CASE_SCODE(E_FAIL)
|
||
|
CASE_SCODE(E_ACCESSDENIED)
|
||
|
|
||
|
/* SCODE's defined in OLE2.H */
|
||
|
|
||
|
CASE_SCODE(OLE_E_OLEVERB)
|
||
|
CASE_SCODE(OLE_E_ADVF)
|
||
|
CASE_SCODE(OLE_E_ENUM_NOMORE)
|
||
|
CASE_SCODE(OLE_E_ADVISENOTSUPPORTED)
|
||
|
CASE_SCODE(OLE_E_NOCONNECTION)
|
||
|
CASE_SCODE(OLE_E_NOTRUNNING)
|
||
|
CASE_SCODE(OLE_E_NOCACHE)
|
||
|
CASE_SCODE(OLE_E_BLANK)
|
||
|
CASE_SCODE(OLE_E_CLASSDIFF)
|
||
|
CASE_SCODE(OLE_E_CANT_GETMONIKER)
|
||
|
CASE_SCODE(OLE_E_CANT_BINDTOSOURCE)
|
||
|
CASE_SCODE(OLE_E_STATIC)
|
||
|
CASE_SCODE(OLE_E_PROMPTSAVECANCELLED)
|
||
|
CASE_SCODE(OLE_E_INVALIDRECT)
|
||
|
CASE_SCODE(OLE_E_WRONGCOMPOBJ)
|
||
|
CASE_SCODE(OLE_E_INVALIDHWND)
|
||
|
CASE_SCODE(OLE_E_NOT_INPLACEACTIVE)
|
||
|
CASE_SCODE(OLE_E_CANTCONVERT)
|
||
|
CASE_SCODE(OLE_E_NOSTORAGE)
|
||
|
|
||
|
CASE_SCODE(DV_E_FORMATETC)
|
||
|
CASE_SCODE(DV_E_DVTARGETDEVICE)
|
||
|
CASE_SCODE(DV_E_STGMEDIUM)
|
||
|
CASE_SCODE(DV_E_STATDATA)
|
||
|
CASE_SCODE(DV_E_LINDEX)
|
||
|
CASE_SCODE(DV_E_TYMED)
|
||
|
CASE_SCODE(DV_E_CLIPFORMAT)
|
||
|
CASE_SCODE(DV_E_DVASPECT)
|
||
|
CASE_SCODE(DV_E_DVTARGETDEVICE_SIZE)
|
||
|
CASE_SCODE(DV_E_NOIVIEWOBJECT)
|
||
|
|
||
|
CASE_SCODE(OLE_S_USEREG)
|
||
|
CASE_SCODE(OLE_S_STATIC)
|
||
|
CASE_SCODE(OLE_S_MAC_CLIPFORMAT)
|
||
|
|
||
|
CASE_SCODE(CONVERT10_E_OLESTREAM_GET)
|
||
|
CASE_SCODE(CONVERT10_E_OLESTREAM_PUT)
|
||
|
CASE_SCODE(CONVERT10_E_OLESTREAM_FMT)
|
||
|
CASE_SCODE(CONVERT10_E_OLESTREAM_BITMAP_TO_DIB)
|
||
|
CASE_SCODE(CONVERT10_E_STG_FMT)
|
||
|
CASE_SCODE(CONVERT10_E_STG_NO_STD_STREAM)
|
||
|
CASE_SCODE(CONVERT10_E_STG_DIB_TO_BITMAP)
|
||
|
CASE_SCODE(CONVERT10_S_NO_PRESENTATION)
|
||
|
|
||
|
CASE_SCODE(CLIPBRD_E_CANT_OPEN)
|
||
|
CASE_SCODE(CLIPBRD_E_CANT_EMPTY)
|
||
|
CASE_SCODE(CLIPBRD_E_CANT_SET)
|
||
|
CASE_SCODE(CLIPBRD_E_BAD_DATA)
|
||
|
CASE_SCODE(CLIPBRD_E_CANT_CLOSE)
|
||
|
|
||
|
CASE_SCODE(DRAGDROP_E_NOTREGISTERED)
|
||
|
CASE_SCODE(DRAGDROP_E_ALREADYREGISTERED)
|
||
|
CASE_SCODE(DRAGDROP_E_INVALIDHWND)
|
||
|
CASE_SCODE(DRAGDROP_S_DROP)
|
||
|
CASE_SCODE(DRAGDROP_S_CANCEL)
|
||
|
CASE_SCODE(DRAGDROP_S_USEDEFAULTCURSORS)
|
||
|
|
||
|
CASE_SCODE(OLEOBJ_E_NOVERBS)
|
||
|
CASE_SCODE(OLEOBJ_E_INVALIDVERB)
|
||
|
CASE_SCODE(OLEOBJ_S_INVALIDVERB)
|
||
|
CASE_SCODE(OLEOBJ_S_CANNOT_DOVERB_NOW)
|
||
|
CASE_SCODE(OLEOBJ_S_INVALIDHWND)
|
||
|
CASE_SCODE(INPLACE_E_NOTUNDOABLE)
|
||
|
CASE_SCODE(INPLACE_E_NOTOOLSPACE)
|
||
|
CASE_SCODE(INPLACE_S_TRUNCATED)
|
||
|
|
||
|
/* SCODE's defined in COMPOBJ.H */
|
||
|
|
||
|
CASE_SCODE(CO_E_NOTINITIALIZED)
|
||
|
CASE_SCODE(CO_E_ALREADYINITIALIZED)
|
||
|
CASE_SCODE(CO_E_CANTDETERMINECLASS)
|
||
|
CASE_SCODE(CO_E_CLASSSTRING)
|
||
|
CASE_SCODE(CO_E_IIDSTRING)
|
||
|
CASE_SCODE(CO_E_APPNOTFOUND)
|
||
|
CASE_SCODE(CO_E_APPSINGLEUSE)
|
||
|
CASE_SCODE(CO_E_ERRORINAPP)
|
||
|
CASE_SCODE(CO_E_DLLNOTFOUND)
|
||
|
CASE_SCODE(CO_E_ERRORINDLL)
|
||
|
CASE_SCODE(CO_E_WRONGOSFORAPP)
|
||
|
CASE_SCODE(CO_E_OBJNOTREG)
|
||
|
CASE_SCODE(CO_E_OBJISREG)
|
||
|
CASE_SCODE(CO_E_OBJNOTCONNECTED)
|
||
|
CASE_SCODE(CO_E_APPDIDNTREG)
|
||
|
CASE_SCODE(CLASS_E_NOAGGREGATION)
|
||
|
CASE_SCODE(CLASS_E_CLASSNOTAVAILABLE)
|
||
|
CASE_SCODE(REGDB_E_READREGDB)
|
||
|
CASE_SCODE(REGDB_E_WRITEREGDB)
|
||
|
CASE_SCODE(REGDB_E_KEYMISSING)
|
||
|
CASE_SCODE(REGDB_E_INVALIDVALUE)
|
||
|
CASE_SCODE(REGDB_E_CLASSNOTREG)
|
||
|
CASE_SCODE(REGDB_E_IIDNOTREG)
|
||
|
CASE_SCODE(RPC_E_CALL_REJECTED)
|
||
|
CASE_SCODE(RPC_E_CALL_CANCELED)
|
||
|
CASE_SCODE(RPC_E_CANTPOST_INSENDCALL)
|
||
|
CASE_SCODE(RPC_E_CANTCALLOUT_INASYNCCALL)
|
||
|
CASE_SCODE(RPC_E_CANTCALLOUT_INEXTERNALCALL)
|
||
|
CASE_SCODE(RPC_E_CONNECTION_TERMINATED)
|
||
|
CASE_SCODE(RPC_E_SERVER_DIED)
|
||
|
CASE_SCODE(RPC_E_CLIENT_DIED)
|
||
|
CASE_SCODE(RPC_E_INVALID_DATAPACKET)
|
||
|
CASE_SCODE(RPC_E_CANTTRANSMIT_CALL)
|
||
|
CASE_SCODE(RPC_E_CLIENT_CANTMARSHAL_DATA)
|
||
|
CASE_SCODE(RPC_E_CLIENT_CANTUNMARSHAL_DATA)
|
||
|
CASE_SCODE(RPC_E_SERVER_CANTMARSHAL_DATA)
|
||
|
CASE_SCODE(RPC_E_SERVER_CANTUNMARSHAL_DATA)
|
||
|
CASE_SCODE(RPC_E_INVALID_DATA)
|
||
|
CASE_SCODE(RPC_E_INVALID_PARAMETER)
|
||
|
CASE_SCODE(RPC_E_UNEXPECTED)
|
||
|
|
||
|
/* SCODE's defined in DVOBJ.H */
|
||
|
|
||
|
CASE_SCODE(DATA_S_SAMEFORMATETC)
|
||
|
CASE_SCODE(VIEW_E_DRAW)
|
||
|
CASE_SCODE(VIEW_S_ALREADY_FROZEN)
|
||
|
CASE_SCODE(CACHE_E_NOCACHE_UPDATED)
|
||
|
CASE_SCODE(CACHE_S_FORMATETC_NOTSUPPORTED)
|
||
|
CASE_SCODE(CACHE_S_SAMECACHE)
|
||
|
CASE_SCODE(CACHE_S_SOMECACHES_NOTUPDATED)
|
||
|
|
||
|
/* SCODE's defined in STORAGE.H */
|
||
|
|
||
|
CASE_SCODE(STG_E_INVALIDFUNCTION)
|
||
|
CASE_SCODE(STG_E_FILENOTFOUND)
|
||
|
CASE_SCODE(STG_E_PATHNOTFOUND)
|
||
|
CASE_SCODE(STG_E_TOOMANYOPENFILES)
|
||
|
CASE_SCODE(STG_E_ACCESSDENIED)
|
||
|
CASE_SCODE(STG_E_INVALIDHANDLE)
|
||
|
CASE_SCODE(STG_E_INSUFFICIENTMEMORY)
|
||
|
CASE_SCODE(STG_E_INVALIDPOINTER)
|
||
|
CASE_SCODE(STG_E_NOMOREFILES)
|
||
|
CASE_SCODE(STG_E_DISKISWRITEPROTECTED)
|
||
|
CASE_SCODE(STG_E_SEEKERROR)
|
||
|
CASE_SCODE(STG_E_WRITEFAULT)
|
||
|
CASE_SCODE(STG_E_READFAULT)
|
||
|
CASE_SCODE(STG_E_SHAREVIOLATION)
|
||
|
CASE_SCODE(STG_E_LOCKVIOLATION)
|
||
|
CASE_SCODE(STG_E_FILEALREADYEXISTS)
|
||
|
CASE_SCODE(STG_E_INVALIDPARAMETER)
|
||
|
CASE_SCODE(STG_E_MEDIUMFULL)
|
||
|
CASE_SCODE(STG_E_ABNORMALAPIEXIT)
|
||
|
CASE_SCODE(STG_E_INVALIDHEADER)
|
||
|
CASE_SCODE(STG_E_INVALIDNAME)
|
||
|
CASE_SCODE(STG_E_UNKNOWN)
|
||
|
CASE_SCODE(STG_E_UNIMPLEMENTEDFUNCTION)
|
||
|
CASE_SCODE(STG_E_INVALIDFLAG)
|
||
|
CASE_SCODE(STG_E_INUSE)
|
||
|
CASE_SCODE(STG_E_NOTCURRENT)
|
||
|
CASE_SCODE(STG_E_REVERTED)
|
||
|
CASE_SCODE(STG_E_CANTSAVE)
|
||
|
CASE_SCODE(STG_E_OLDFORMAT)
|
||
|
CASE_SCODE(STG_E_OLDDLL)
|
||
|
CASE_SCODE(STG_E_SHAREREQUIRED)
|
||
|
CASE_SCODE(STG_E_NOTFILEBASEDSTORAGE)
|
||
|
CASE_SCODE(STG_E_EXTANTMARSHALLINGS)
|
||
|
CASE_SCODE(STG_S_CONVERTED)
|
||
|
|
||
|
/* SCODE's defined in STORAGE.H */
|
||
|
|
||
|
CASE_SCODE(MK_E_CONNECTMANUALLY)
|
||
|
CASE_SCODE(MK_E_EXCEEDEDDEADLINE)
|
||
|
CASE_SCODE(MK_E_NEEDGENERIC)
|
||
|
CASE_SCODE(MK_E_UNAVAILABLE)
|
||
|
CASE_SCODE(MK_E_SYNTAX)
|
||
|
CASE_SCODE(MK_E_NOOBJECT)
|
||
|
CASE_SCODE(MK_E_INVALIDEXTENSION)
|
||
|
CASE_SCODE(MK_E_INTERMEDIATEINTERFACENOTSUPPORTED)
|
||
|
CASE_SCODE(MK_E_NOTBINDABLE)
|
||
|
CASE_SCODE(MK_E_NOTBOUND)
|
||
|
CASE_SCODE(MK_E_CANTOPENFILE)
|
||
|
CASE_SCODE(MK_E_MUSTBOTHERUSER)
|
||
|
CASE_SCODE(MK_E_NOINVERSE)
|
||
|
CASE_SCODE(MK_E_NOSTORAGE)
|
||
|
CASE_SCODE(MK_E_NOPREFIX)
|
||
|
CASE_SCODE(MK_S_REDUCED_TO_SELF)
|
||
|
CASE_SCODE(MK_S_ME)
|
||
|
CASE_SCODE(MK_S_HIM)
|
||
|
CASE_SCODE(MK_S_US)
|
||
|
CASE_SCODE(MK_S_MONIKERALREADYREGISTERED)
|
||
|
|
||
|
default:
|
||
|
pszErrName = TEXT("UNKNOWN SCODE");
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
TCHAR szBuf[256];
|
||
|
wsprintf(szBuf, TEXT("%s %s (0x%lx)\n"), lpszMsg, pszErrName, sc);
|
||
|
OleDbgPrintAlways(lpszPrefix, szBuf, 0);
|
||
|
}
|
||
|
|
||
|
STDAPI OleStdAssert(LPTSTR lpstrExpr, LPTSTR lpstrMsg, LPTSTR lpstrFileName, UINT iLine)
|
||
|
{
|
||
|
TCHAR buf[4096];
|
||
|
wsprintf(buf, _T("Expr: %s Msg: (%s)\n")
|
||
|
_T("File: %s, line: %ud"), lpstrExpr, lpstrMsg, lpstrFileName, iLine);
|
||
|
int i = MessageBox(GetActiveWindow(), buf, _T("Assertion Failed!"),
|
||
|
MB_TASKMODAL|MB_ABORTRETRYIGNORE);
|
||
|
switch (i)
|
||
|
{
|
||
|
case IDABORT:
|
||
|
ExitProcess((UINT)-3);
|
||
|
break;
|
||
|
|
||
|
case IDRETRY:
|
||
|
#ifdef _X86_
|
||
|
_asm int 3;
|
||
|
#else
|
||
|
DebugBreak();
|
||
|
#endif
|
||
|
break;
|
||
|
}
|
||
|
return NOERROR;
|
||
|
}
|
||
|
|
||
|
#endif //_DEBUG
|