ReactOS  0.4.15-dev-1070-ge1a01de
comdef.h
Go to the documentation of this file.
1 
6 #ifndef _INC_COMDEF
7 #define _INC_COMDEF
8 
9 #include <_mingw.h>
10 
11 #ifndef RC_INVOKED
12 
13 #ifndef __cplusplus
14 #error Native Compiler support only available in C++ compiler
15 #endif
16 
17 #include <ole2.h>
18 #include <olectl.h>
19 #include <comutil.h>
20 
21 #ifndef WINAPI
22 #define WINAPI __stdcall
23 #endif
24 
25 #ifdef __cplusplus
26 
27 class _com_error;
28 void WINAPI _com_raise_error(HRESULT hr,IErrorInfo *perrinfo = 0);
29 void WINAPI _set_com_error_handler(void (WINAPI *pHandler)(HRESULT hr,IErrorInfo *perrinfo));
32 HRESULT WINAPI _com_dispatch_propget(IDispatch*,DISPID,VARTYPE,void*);
33 HRESULT __cdecl _com_dispatch_propput(IDispatch*,DISPID,VARTYPE,...);
34 HRESULT __cdecl _com_dispatch_method(IDispatch*,DISPID,WORD,VARTYPE,void*,const wchar_t*,...);
35 HRESULT WINAPI _com_dispatch_raw_propget(IDispatch*,DISPID,VARTYPE,void*) throw();
36 HRESULT __cdecl _com_dispatch_raw_propput(IDispatch*,DISPID,VARTYPE,...) throw();
37 HRESULT __cdecl _com_dispatch_raw_method(IDispatch*,DISPID,WORD,VARTYPE,void*,const wchar_t*,...) throw();
38 
39 class _com_error {
40 public:
41  _com_error(HRESULT hr,IErrorInfo *perrinfo = NULL,bool fAddRef = false) throw();
42  _com_error(const _com_error &that) throw();
43  virtual ~_com_error() throw();
44  _com_error &operator=(const _com_error &that) throw();
45  HRESULT Error() const throw();
46  WORD WCode() const throw();
47  IErrorInfo *ErrorInfo() const throw();
48  _bstr_t Description() const;
49  DWORD HelpContext() const throw();
50  _bstr_t HelpFile() const;
51  _bstr_t Source() const;
52  GUID GUID_() const throw();
53  const TCHAR *ErrorMessage() const throw();
54  static HRESULT WCodeToHRESULT(WORD wCode) throw();
55  static WORD HRESULTToWCode(HRESULT hr) throw();
56 private:
57  void Dtor() throw();
58  void Ctor(const _com_error &that) throw();
59  enum {
60  WCODE_HRESULT_FIRST = MAKE_HRESULT(SEVERITY_ERROR,FACILITY_ITF,0x200),WCODE_HRESULT_LAST = MAKE_HRESULT(SEVERITY_ERROR,FACILITY_ITF+1,0) - 1
61  };
62  HRESULT m_hresult;
63  IErrorInfo *m_perrinfo;
64  mutable TCHAR *m_pszMsg;
65 };
66 
67 inline _com_error::_com_error(HRESULT hr,IErrorInfo *perrinfo,bool fAddRef) throw() : m_hresult(hr),m_perrinfo(perrinfo),m_pszMsg(NULL) {
68  if(m_perrinfo!=NULL && fAddRef) m_perrinfo->AddRef();
69 }
70 
71 inline _com_error::_com_error(const _com_error &that) throw() {
72  Ctor(that);
73 }
74 
75 inline _com_error::~_com_error() throw() {
76  Dtor();
77 }
78 
79 inline _com_error &_com_error::operator=(const _com_error &that) throw() {
80  if(this!=&that) {
81  Dtor();
82  Ctor(that);
83  }
84  return *this;
85 }
86 
87 inline HRESULT _com_error::Error() const throw() { return m_hresult; }
88 inline WORD _com_error::WCode() const throw() { return HRESULTToWCode(m_hresult); }
89 
90 inline IErrorInfo *_com_error::ErrorInfo() const throw() {
91  if(m_perrinfo!=NULL) m_perrinfo->AddRef();
92  return m_perrinfo;
93 }
94 
95 inline _bstr_t _com_error::Description() const {
96  BSTR bstr = NULL;
97  if(m_perrinfo!=NULL) m_perrinfo->GetDescription(&bstr);
98  return _bstr_t(bstr,false);
99 }
100 
101 inline DWORD _com_error::HelpContext() const throw() {
102  DWORD dwHelpContext = 0;
103  if(m_perrinfo!=NULL) m_perrinfo->GetHelpContext(&dwHelpContext);
104  return dwHelpContext;
105 }
106 
107 inline _bstr_t _com_error::HelpFile() const {
108  BSTR bstr = NULL;
109  if(m_perrinfo!=NULL) m_perrinfo->GetHelpFile(&bstr);
110  return _bstr_t(bstr,false);
111 }
112 
113 inline _bstr_t _com_error::Source() const {
114  BSTR bstr = NULL;
115  if(m_perrinfo!=NULL) m_perrinfo->GetSource(&bstr);
116  return _bstr_t(bstr,false);
117 }
118 
119 inline _GUID _com_error::GUID_() const throw() {
120  _GUID guid;
121  memset (&guid, 0, sizeof (_GUID));
122  if(m_perrinfo!=NULL) m_perrinfo->GetGUID(&guid);
123  return guid;
124 }
125 
126 inline const TCHAR *_com_error::ErrorMessage() const throw() {
127  if(!m_pszMsg) {
129  if(m_pszMsg!=NULL) {
130  int nLen = lstrlen(m_pszMsg);
131  if(nLen > 1 && m_pszMsg[nLen - 1]=='\n') {
132  m_pszMsg[nLen-1] = 0;
133  if(m_pszMsg[nLen - 2]=='\r') m_pszMsg[nLen-2] = 0;
134  }
135  } else {
136  m_pszMsg = (LPTSTR)LocalAlloc(0,32 *sizeof(TCHAR));
137  if(m_pszMsg!=NULL) {
138  WORD wCode = WCode();
139  if(wCode!=0) {
140  _COM_PRINTF_S_1(m_pszMsg,32,TEXT("IDispatch error #%d"),wCode);
141  } else {
142  _COM_PRINTF_S_1(m_pszMsg,32,TEXT("Unknown error 0x%0lX"),m_hresult);
143  }
144  }
145  }
146  }
147  return m_pszMsg;
148 }
149 
150 inline HRESULT _com_error::WCodeToHRESULT(WORD wCode) throw() { return wCode >= 0xFE00 ? WCODE_HRESULT_LAST : WCODE_HRESULT_FIRST + wCode; }
151 inline WORD _com_error::HRESULTToWCode(HRESULT hr) throw() { return (hr >= WCODE_HRESULT_FIRST && hr <= WCODE_HRESULT_LAST) ? WORD(hr - WCODE_HRESULT_FIRST) : 0; }
152 
153 inline void _com_error::Dtor() throw() {
154  if(m_perrinfo!=NULL) m_perrinfo->Release();
155  if(m_pszMsg!=NULL) LocalFree((HLOCAL)m_pszMsg);
156 }
157 
158 inline void _com_error::Ctor(const _com_error &that) throw() {
159  m_hresult = that.m_hresult;
160  m_perrinfo = that.m_perrinfo;
161  m_pszMsg = NULL;
162  if(m_perrinfo!=NULL) m_perrinfo->AddRef();
163 }
164 
165 typedef int __missing_type__;
166 
167 #if !defined(_COM_SMARTPTR)
168 #if !defined(_INC_COMIP)
169 #include <comip.h>
170 #endif
171 #define _COM_SMARTPTR _com_ptr_t
172 #define _COM_SMARTPTR_LEVEL2 _com_IIID
173 #endif
174 #if defined(_COM_SMARTPTR)
175 #if !defined(_COM_SMARTPTR_TYPEDEF)
176 #if defined(_COM_SMARTPTR_LEVEL2)
177 #define _COM_SMARTPTR_TYPEDEF(Interface,IID) UUID IIDArgForTypedef ## Interface = IID; typedef _COM_SMARTPTR< _COM_SMARTPTR_LEVEL2<Interface, &IIDArgForTypedef ## Interface > > Interface ## Ptr
178 #else
179 #define _COM_SMARTPTR_TYPEDEF(Interface,IID) UUID IIDArgForTypedef ## Interface = IID; typedef _COM_SMARTPTR<Interface,&IIDArgForTypedef ## Interface > Interface ## Ptr
180 #endif
181 #endif
182 #endif
183 
184 #if !defined(_COM_NO_STANDARD_GUIDS_)
185 #if defined(__IFontDisp_INTERFACE_DEFINED__)
186 #if !defined(Font)
187  struct Font : IFontDisp {};
188 #endif
189 _COM_SMARTPTR_TYPEDEF(Font, IID_IDispatch);
190 
191 #endif
192 #if defined(__IFontEventsDisp_INTERFACE_DEFINED__)
193 #if !defined(FontEvents)
194  struct FontEvents : IFontEventsDisp {};
195 #endif
196 _COM_SMARTPTR_TYPEDEF(FontEvents, IID_IDispatch);
197 #endif
198 #if defined(__IPictureDisp_INTERFACE_DEFINED__)
199 #if !defined(Picture)
200  struct Picture : IPictureDisp {};
201 #endif
202 _COM_SMARTPTR_TYPEDEF(Picture, IID_IDispatch);
203 #endif
204 
205 #include "comdefsp.h"
206 #endif
207 #endif
208 
209 #endif /* __cplusplus */
210 
211 #endif
#define REFIID
Definition: guiddef.h:118
void WINAPI _com_issue_error(HRESULT hr)
Definition: comsupp.cpp:31
HRESULT hr
Definition: shlfolder.c:183
Definition: scsiwmi.h:51
#define __cdecl
Definition: accygwin.h:79
#define LANG_NEUTRAL
Definition: nls.h:22
static VOID ErrorMessage(DWORD dwErrorCode, LPWSTR szFormat,...)
Definition: attrib.c:51
#define SUBLANG_DEFAULT
Definition: nls.h:168
operator
#define WINAPI
Definition: comdef.h:22
OLECHAR * BSTR
Definition: compat.h:2041
static const WCHAR Description[]
Definition: oid.c:1266
CHAR * LPTSTR
Definition: xmlstorage.h:192
const GUID * guid
#define _COM_PRINTF_S_1(dest, destsize, format, arg1)
Definition: comutil.h:19
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
Definition: winbase.h:400
smooth NULL
Definition: ftsmooth.c:416
#define MAKE_HRESULT(sev, fac, code)
Definition: dmerror.h:30
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:404
char TCHAR
Definition: xmlstorage.h:189
LONG HRESULT
Definition: typedefs.h:79
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL Error
Definition: chkdsk.c:66
#define SEVERITY_ERROR
Definition: winerror.h:65
ULONG AddRef()
void WINAPI _com_raise_error(HRESULT hr, IErrorInfo *perrinfo)
Definition: comsupp.cpp:21
const GUID IID_IDispatch
#define FormatMessage
Definition: winbase.h:3635
void WINAPI _set_com_error_handler(COM_ERROR_HANDLER *phandler)
Definition: comsupp.cpp:26
static VARIANTARG static DISPID
Definition: ordinal.c:49
#define lstrlen
Definition: winbase.h:3716
#define TEXT(s)
Definition: k32.h:26
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1577
unsigned short VARTYPE
Definition: compat.h:2002
#define FACILITY_ITF
Definition: winerror.h:26
void WINAPI _com_issue_errorex(HRESULT hr, IUnknown *punk, REFIID riid)
Definition: comsupp.cpp:36
const WCHAR * class
Definition: main.c:68
#define const
Definition: zconf.h:230
#define MAKELANGID(p, s)
Definition: nls.h:15
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
Definition: ndis.h:3167
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:1373
#define memset(x, y, z)
Definition: compat.h:39