2 * PROJECT: ReactOS crt library
3 * LICENSE: GPLv2+ - See COPYING in the top level directory
4 * PURPOSE: Compiler support for COM
5 * PROGRAMMER: Thomas Faber
10 #define WIN32_NO_STATUS
18 typedef void WINAPI
COM_ERROR_HANDLER(HRESULT
, IErrorInfo
*);
19 static COM_ERROR_HANDLER
*com_error_handler
;
21 void WINAPI
_com_raise_error(HRESULT hr
, IErrorInfo
*perrinfo
)
23 throw _com_error(hr
, perrinfo
);
26 void WINAPI
_set_com_error_handler(COM_ERROR_HANDLER
*phandler
)
28 com_error_handler
= phandler
;
31 void WINAPI
_com_issue_error(HRESULT hr
)
33 com_error_handler(hr
, NULL
);
36 void WINAPI
_com_issue_errorex(HRESULT hr
, IUnknown
*punk
, REFIID riid
)
39 IErrorInfo
*perrinfo
= NULL
;
41 if (SUCCEEDED(punk
->QueryInterface(riid
, &pv
)))
43 ISupportErrorInfo
*pserrinfo
= static_cast<ISupportErrorInfo
*>(pv
);
44 if (pserrinfo
->InterfaceSupportsErrorInfo(riid
) == S_OK
)
45 (void)GetErrorInfo(0, &perrinfo
);
49 com_error_handler(hr
, perrinfo
);
53 _variant_t
vtMissing(DISP_E_PARAMNOTFOUND
, VT_ERROR
);