Persönlich würde ich eine einfache Funktion schreiben:
void ThrowOnFail( HRESULT hrcode )
{
if (FAILED(hrcode))
throw _com_error(hrcode);
}
Dann werden die Funktionsaufrufe:
ThrowOnFail( ipf.CoCreateInstance(CLSID_ShellLink, 0, CLSCTX_INPROC_SERVER) );
ThrowOnFail( ipf->Load(source.c_str(), 0) );
ATL::CComPtr<IShellLink> shellLink;
ThrowOnFail( ipf->QueryInterface(&shellLink) );
ThrowOnFail( shellLink->Resolve(0, SLR_NO_UI) );
ThrowOnFail( shellLink->GetPath(linkTarget, MAX_PATH, 0, SLGP_RAWPATH) );
Sie haben übrigens einen Check für errorCheck
danach verpasst Load
. Dies wird mit einer Check-Funktion leichter zu erkennen.