[COMSUPP]
[reactos.git] / reactos / lib / sdk / comsupp / comsupp.cpp
1 /*
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
6 */
7
8 #include <stdarg.h>
9
10 #define WIN32_NO_STATUS
11 #define _INC_WINDOWS
12
13 #include <windef.h>
14 #include <winbase.h>
15 #include <comdef.h>
16
17 /* comdef.h */
18 typedef void WINAPI COM_ERROR_HANDLER(HRESULT, IErrorInfo *);
19 static COM_ERROR_HANDLER *com_error_handler;
20
21 void WINAPI _com_raise_error(HRESULT hr, IErrorInfo *perrinfo)
22 {
23 throw _com_error(hr, perrinfo);
24 }
25
26 void WINAPI _set_com_error_handler(COM_ERROR_HANDLER *phandler)
27 {
28 com_error_handler = phandler;
29 }
30
31 void WINAPI _com_issue_error(HRESULT hr)
32 {
33 com_error_handler(hr, NULL);
34 }
35
36 void WINAPI _com_issue_errorex(HRESULT hr, IUnknown *punk, REFIID riid)
37 {
38 void *pv;
39 IErrorInfo *perrinfo = NULL;
40
41 if (SUCCEEDED(punk->QueryInterface(riid, &pv)))
42 {
43 ISupportErrorInfo *pserrinfo = static_cast<ISupportErrorInfo *>(pv);
44 if (pserrinfo->InterfaceSupportsErrorInfo(riid) == S_OK)
45 (void)GetErrorInfo(0, &perrinfo);
46 pserrinfo->Release();
47 }
48
49 com_error_handler(hr, perrinfo);
50 }
51
52 /* comutil.h */
53 _variant_t vtMissing(DISP_E_PARAMNOTFOUND, VT_ERROR);