Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212/** * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the mingw-w64 runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */#ifndef _INC_COMDEF#define _INC_COMDEF
#include <_mingw.h>
#ifndef RC_INVOKED
#ifndef __cplusplus#error Native Compiler support only available in C++ compiler#endif
#include <ole2.h>#include <olectl.h>#include <comutil.h>
#ifndef WINAPI#define WINAPI __stdcall#endif
#ifdef __cplusplus
class _com_error;void WINAPI _com_raise_error(HRESULT hr,IErrorInfo *perrinfo = 0);void WINAPI _set_com_error_handler(void (WINAPI *pHandler)(HRESULT hr,IErrorInfo *perrinfo));void WINAPI _com_issue_error(HRESULT);void WINAPI _com_issue_errorex(HRESULT,IUnknown*,REFIID);HRESULT WINAPI _com_dispatch_propget(IDispatch*,DISPID,VARTYPE,void*);HRESULT __cdecl _com_dispatch_propput(IDispatch*,DISPID,VARTYPE,...);HRESULT __cdecl _com_dispatch_method(IDispatch*,DISPID,WORD,VARTYPE,void*,const wchar_t*,...);HRESULT WINAPI _com_dispatch_raw_propget(IDispatch*,DISPID,VARTYPE,void*) throw();HRESULT __cdecl _com_dispatch_raw_propput(IDispatch*,DISPID,VARTYPE,...) throw();HRESULT __cdecl _com_dispatch_raw_method(IDispatch*,DISPID,WORD,VARTYPE,void*,const wchar_t*,...) throw();
class _com_error {public: _com_error(HRESULT hr,IErrorInfo *perrinfo = NULL,bool fAddRef = false) throw(); _com_error(const _com_error &that) throw(); virtual ~_com_error() throw(); _com_error &operator=(const _com_error &that) throw(); HRESULT Error() const throw(); WORD WCode() const throw(); IErrorInfo *ErrorInfo() const throw(); _bstr_t Description() const; DWORD HelpContext() const throw(); _bstr_t HelpFile() const; _bstr_t Source() const; GUID GUID_() const throw(); const TCHAR *ErrorMessage() const throw(); static HRESULT WCodeToHRESULT(WORD wCode) throw(); static WORD HRESULTToWCode(HRESULT hr) throw();private: void Dtor() throw(); void Ctor(const _com_error &that) throw(); enum { WCODE_HRESULT_FIRST = MAKE_HRESULT(SEVERITY_ERROR,FACILITY_ITF,0x200),WCODE_HRESULT_LAST = MAKE_HRESULT(SEVERITY_ERROR,FACILITY_ITF+1,0) - 1 }; HRESULT m_hresult; IErrorInfo *m_perrinfo; mutable TCHAR *m_pszMsg;};
inline _com_error::_com_error(HRESULT hr,IErrorInfo *perrinfo,bool fAddRef) throw() : m_hresult(hr),m_perrinfo(perrinfo),m_pszMsg(NULL) { if(m_perrinfo!=NULL && fAddRef) m_perrinfo->AddRef();}
inline _com_error::_com_error(const _com_error &that) throw() { Ctor(that);}
inline _com_error::~_com_error() throw() { Dtor();}
inline _com_error &_com_error::operator=(const _com_error &that) throw() { if(this!=&that) { Dtor(); Ctor(that); } return *this;}
inline HRESULT _com_error::Error() const throw() { return m_hresult; }inline WORD _com_error::WCode() const throw() { return HRESULTToWCode(m_hresult); }
inline IErrorInfo *_com_error::ErrorInfo() const throw() { if(m_perrinfo!=NULL) m_perrinfo->AddRef(); return m_perrinfo;}
inline _bstr_t _com_error::Description() const { BSTR bstr = NULL; if(m_perrinfo!=NULL) m_perrinfo->GetDescription(&bstr); return _bstr_t(bstr,false);}
inline DWORD _com_error::HelpContext() const throw() { DWORD dwHelpContext = 0; if(m_perrinfo!=NULL) m_perrinfo->GetHelpContext(&dwHelpContext); return dwHelpContext;}
inline _bstr_t _com_error::HelpFile() const { BSTR bstr = NULL; if(m_perrinfo!=NULL) m_perrinfo->GetHelpFile(&bstr); return _bstr_t(bstr,false);}
inline _bstr_t _com_error::Source() const { BSTR bstr = NULL; if(m_perrinfo!=NULL) m_perrinfo->GetSource(&bstr); return _bstr_t(bstr,false);}
inline _GUID _com_error::GUID_() const throw() { _GUID guid; memset (&guid, 0, sizeof (_GUID)); if(m_perrinfo!=NULL) m_perrinfo->GetGUID(&guid); return guid;}
inline const TCHAR *_com_error::ErrorMessage() const throw() { if(!m_pszMsg) { FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,NULL,m_hresult,MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),(LPTSTR)&m_pszMsg,0,NULL); if(m_pszMsg!=NULL) { int nLen = lstrlen(m_pszMsg); if(nLen > 1 && m_pszMsg[nLen - 1]=='\n') { m_pszMsg[nLen-1] = 0; if(m_pszMsg[nLen - 2]=='\r') m_pszMsg[nLen-2] = 0; } } else { m_pszMsg = (LPTSTR)LocalAlloc(0,32 *sizeof(TCHAR)); if(m_pszMsg!=NULL) { WORD wCode = WCode(); if(wCode!=0) { _COM_PRINTF_S_1(m_pszMsg,32,TEXT("IDispatch error #%d"),wCode); } else { _COM_PRINTF_S_1(m_pszMsg,32,TEXT("Unknown error 0x%0lX"),m_hresult); } } } } return m_pszMsg;}
inline HRESULT _com_error::WCodeToHRESULT(WORD wCode) throw() { return wCode >= 0xFE00 ? WCODE_HRESULT_LAST : WCODE_HRESULT_FIRST + wCode; }inline WORD _com_error::HRESULTToWCode(HRESULT hr) throw() { return (hr >= WCODE_HRESULT_FIRST && hr <= WCODE_HRESULT_LAST) ? WORD(hr - WCODE_HRESULT_FIRST) : 0; }
inline void _com_error::Dtor() throw() { if(m_perrinfo!=NULL) m_perrinfo->Release(); if(m_pszMsg!=NULL) LocalFree((HLOCAL)m_pszMsg);}
inline void _com_error::Ctor(const _com_error &that) throw() { m_hresult = that.m_hresult; m_perrinfo = that.m_perrinfo; m_pszMsg = NULL; if(m_perrinfo!=NULL) m_perrinfo->AddRef();}
typedef int __missing_type__;
#if !defined(_COM_SMARTPTR)#if !defined(_INC_COMIP)#include <comip.h>#endif#define _COM_SMARTPTR _com_ptr_t#define _COM_SMARTPTR_LEVEL2 _com_IIID#endif#if defined(_COM_SMARTPTR)#if !defined(_COM_SMARTPTR_TYPEDEF)#if defined(_COM_SMARTPTR_LEVEL2)#define _COM_SMARTPTR_TYPEDEF(Interface,IID) UUID IIDArgForTypedef ## Interface = IID; typedef _COM_SMARTPTR< _COM_SMARTPTR_LEVEL2<Interface, &IIDArgForTypedef ## Interface > > Interface ## Ptr#else#define _COM_SMARTPTR_TYPEDEF(Interface,IID) UUID IIDArgForTypedef ## Interface = IID; typedef _COM_SMARTPTR<Interface,&IIDArgForTypedef ## Interface > Interface ## Ptr#endif#endif#endif
#if !defined(_COM_NO_STANDARD_GUIDS_)#if defined(__IFontDisp_INTERFACE_DEFINED__)#if !defined(Font) struct Font : IFontDisp {};#endif_COM_SMARTPTR_TYPEDEF(Font, IID_IDispatch);
#endif#if defined(__IFontEventsDisp_INTERFACE_DEFINED__)#if !defined(FontEvents) struct FontEvents : IFontEventsDisp {};#endif_COM_SMARTPTR_TYPEDEF(FontEvents, IID_IDispatch);#endif#if defined(__IPictureDisp_INTERFACE_DEFINED__)#if !defined(Picture) struct Picture : IPictureDisp {};#endif_COM_SMARTPTR_TYPEDEF(Picture, IID_IDispatch);#endif
#include "comdefsp.h"#endif#endif
#endif /* __cplusplus */
#endif