|
////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2006 Werner Willemsens
//
////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include <comutil.h>
#include <comdef.h>
#include "Error.h"
extern HINSTANCE g_hInstance;
HRESULT ThrowCOMError(const CLSID &clsid, const IID &iid, ULONG nErrorCode)
{
// Who am I?
_bstr_t sComponent;
LPOLESTR sProgId;
ProgIDFromCLSID(clsid, &sProgId);
if (sProgId != NULL)
{
sComponent = sProgId;
CoTaskMemFree (sProgId);
}
// Load string from resource
TCHAR sString[256];
int nLength = LoadString (g_hInstance, nErrorCode, sString, sizeof(sString));
_bstr_t sDescription (sString);
// Create rich error information
ICreateErrorInfoPtr iCreateErrorInfo;
if (SUCCEEDED(CreateErrorInfo (&iCreateErrorInfo)))
{
iCreateErrorInfo->SetGUID (iid);
iCreateErrorInfo->SetSource (sComponent);
iCreateErrorInfo->SetDescription (sDescription);
iCreateErrorInfo->SetHelpFile (_bstr_t(_T("No helpfile")));
iCreateErrorInfo->SetHelpContext (0x1234);
IErrorInfoPtr iErrorInfo (iCreateErrorInfo);
// Store rich error in local thread context, where it will be picked up
// by IChannelHook...
SetErrorInfo (0, iErrorInfo);
}
// Make a valid COM error HRESULT
HRESULT hr = MAKE_HRESULT(3, FACILITY_ITF, nErrorCode);
return hr;
};
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.