📄 oleaut.cpp
字号:
{
switch (p->vt)
{
case VT_BSTR:
VariantClear (p);
break;
}
++p;
}
CoTaskMemFree (ArgVector);
}
return FAILED (m_hResult) ? false : true;
}
#define CASE_SCODE(sc) \
case sc: \
lstrcpy((char*)ErrName, (char*)#sc); \
break;
void COleAutomationControl::ErrDiag ()
{
char ErrName[200];
SCODE sc = GetScode (m_hResult);
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_CANTCALLOUT_AGAIN)
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)
// SCODE's defined in DISPATCH.H
CASE_SCODE (DISP_E_UNKNOWNINTERFACE)
CASE_SCODE (DISP_E_MEMBERNOTFOUND)
CASE_SCODE (DISP_E_PARAMNOTFOUND)
CASE_SCODE (DISP_E_TYPEMISMATCH)
CASE_SCODE (DISP_E_UNKNOWNNAME)
CASE_SCODE (DISP_E_NONAMEDARGS)
CASE_SCODE (DISP_E_BADVARTYPE)
CASE_SCODE (DISP_E_EXCEPTION)
CASE_SCODE (DISP_E_OVERFLOW)
CASE_SCODE (DISP_E_BADINDEX)
CASE_SCODE (DISP_E_UNKNOWNLCID)
CASE_SCODE (DISP_E_ARRAYISLOCKED)
CASE_SCODE (DISP_E_BADPARAMCOUNT)
CASE_SCODE (DISP_E_PARAMNOTOPTIONAL)
CASE_SCODE (DISP_E_BADCALLEE)
CASE_SCODE (DISP_E_NOTACOLLECTION)
CASE_SCODE (TYPE_E_BUFFERTOOSMALL)
CASE_SCODE (TYPE_E_INVDATAREAD)
CASE_SCODE (TYPE_E_UNSUPFORMAT)
CASE_SCODE (TYPE_E_REGISTRYACCESS)
CASE_SCODE (TYPE_E_LIBNOTREGISTERED)
CASE_SCODE (TYPE_E_UNDEFINEDTYPE)
CASE_SCODE (TYPE_E_QUALIFIEDNAMEDISALLOWED)
CASE_SCODE (TYPE_E_INVALIDSTATE)
CASE_SCODE (TYPE_E_WRONGTYPEKIND)
CASE_SCODE (TYPE_E_ELEMENTNOTFOUND)
CASE_SCODE (TYPE_E_AMBIGUOUSNAME)
CASE_SCODE (TYPE_E_NAMECONFLICT)
CASE_SCODE (TYPE_E_UNKNOWNLCID)
CASE_SCODE (TYPE_E_DLLFUNCTIONNOTFOUND)
CASE_SCODE (TYPE_E_BADMODULEKIND)
CASE_SCODE (TYPE_E_SIZETOOBIG)
CASE_SCODE (TYPE_E_DUPLICATEID)
CASE_SCODE (TYPE_E_TYPEMISMATCH)
CASE_SCODE (TYPE_E_OUTOFBOUNDS)
CASE_SCODE (TYPE_E_IOERROR)
CASE_SCODE (TYPE_E_CANTCREATETMPFILE)
CASE_SCODE (TYPE_E_CANTLOADLIBRARY)
CASE_SCODE (TYPE_E_INCONSISTENTPROPFUNCS)
CASE_SCODE (TYPE_E_CIRCULARTYPE)
default:
lstrcpy (ErrName, "UNKNOWN SCODE");
}
char Buf[256];
sprintf (Buf, "An OLE error occured:\r\nCode = %s\r\nResult = %lx.",
(char*) ErrName, m_hResult);
MessageBox (NULL, Buf, "OLE Error", MB_OK);
}
static bool CountArgsInFormat (LPCTSTR Format, UINT* pArgCount)
{
*pArgCount = 0;
if (! Format)
return true;
while (*Format)
{
if (*Format == '&')
Format++;
switch (*Format)
{
case 'b':
case 'i':
case 'I':
case 'r':
case 'R':
case 'c':
case 's':
case 'e':
case 'd':
case 'v':
case 'D':
case 'U':
++*pArgCount;
Format++;
break;
case '\0':
default:
return false;
}
}
return true;
}
static LPCTSTR GetNextVarType (LPCTSTR Format, VARTYPE* pVarType)
{
*pVarType = 0;
if (*Format == '&')
{
*pVarType = VT_BYREF;
Format++;
if (!*Format)
return NULL;
}
switch (*Format)
{
case 'b':
*pVarType |= VT_BOOL;
break;
case 'i':
*pVarType |= VT_I2;
break;
case 'I':
*pVarType |= VT_I4;
break;
case 'r':
*pVarType |= VT_R4;
break;
case 'R':
*pVarType |= VT_R8;
break;
case 'c':
*pVarType |= VT_CY;
break;
case 's':
*pVarType |= VT_BSTR;
break;
case 'e':
*pVarType |= VT_ERROR;
break;
case 'd':
*pVarType |= VT_DATE;
break;
case 'v':
*pVarType |= VT_VARIANT;
break;
case 'U':
*pVarType |= VT_UNKNOWN;
break;
case 'D':
*pVarType |= VT_DISPATCH;
break;
case '\0':
return NULL; // End of Format string
default:
return NULL;
}
return ++Format;
}
#ifndef UNICODE
char* ConvertToAnsi (OLECHAR* sUnicode)
{
static char BufAscii[MAX_OLE_STR];
return ConvertToAnsiBuf (sUnicode, BufAscii);
}
char* ConvertToAnsiBuf (OLECHAR* sUnicode, char* BufAscii)
{
WideCharToMultiByte (CP_ACP, 0, sUnicode, -1, BufAscii, MAX_OLE_STR, NULL, NULL);
return BufAscii;
}
OLECHAR* ConvertToUnicode (char* sAscii)
{
static OLECHAR BufUnicode[MAX_OLE_STR];
return ConvertToUnicodeBuf (sAscii, BufUnicode);
}
OLECHAR* ConvertToUnicodeBuf (char* sAscii, OLECHAR* BufUnicode)
{
MultiByteToWideChar (CP_ACP, 0, sAscii, -1, BufUnicode, MAX_OLE_STR);
return BufUnicode;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -