Mercurial > games > semicongine
diff fuhtark_test/include/winapi/comdef.h @ 1500:91c8c3b7cbf0
add: futhark tests for generating vulkan api
| author | sam <sam@basx.dev> |
|---|---|
| date | Wed, 26 Nov 2025 21:36:48 +0700 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fuhtark_test/include/winapi/comdef.h Wed Nov 26 21:36:48 2025 +0700 @@ -0,0 +1,200 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER 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: + enum { + WCODE_HRESULT_FIRST = MAKE_HRESULT(SEVERITY_ERROR,FACILITY_ITF,0x200),WCODE_HRESULT_LAST = MAKE_HRESULT(SEVERITY_ERROR,FACILITY_ITF+1,0) - 1 + }; + const 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() : m_hresult(that.m_hresult),m_perrinfo(that.m_perrinfo),m_pszMsg(NULL) { + if(m_perrinfo!=NULL) m_perrinfo->AddRef(); +} + +inline _com_error::~_com_error() throw() { + if(m_perrinfo!=NULL) m_perrinfo->Release(); + if(m_pszMsg!=NULL) LocalFree((HLOCAL)m_pszMsg); +} + +inline _com_error &_com_error::operator=(const _com_error &that) throw() { + if(this!=&that) { + this->_com_error::~_com_error(); + this->_com_error::_com_error(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; } + +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) typedef _COM_SMARTPTR<_COM_SMARTPTR_LEVEL2<Interface,&IID> > Interface ## Ptr +#else +#define _COM_SMARTPTR_TYPEDEF(Interface,IID) typedef _COM_SMARTPTR<Interface,&IID> Interface ## Ptr +#endif +#endif +#endif + +#if !defined(_COM_NO_STANDARD_GUIDS_) && USE___UUIDOF != 0 +#if defined(__IFontDisp_INTERFACE_DEFINED__) +__if_not_exists(Font) +{ + struct Font : IFontDisp {}; +} +_COM_SMARTPTR_TYPEDEF(Font,__uuidof(IDispatch)); +#endif +#if defined(__IFontEventsDisp_INTERFACE_DEFINED__) +__if_not_exists(FontEvents) +{ + struct FontEvents : IFontEventsDisp {}; +} +_COM_SMARTPTR_TYPEDEF(FontEvents,__uuidof(IDispatch)); +#endif +#if defined(__IPictureDisp_INTERFACE_DEFINED__) +__if_not_exists(Picture) +{ + struct Picture : IPictureDisp {}; +} +_COM_SMARTPTR_TYPEDEF(Picture,__uuidof(IDispatch)); +#endif + +#include "comdefsp.h" +#endif +#endif + +#endif /* __cplusplus */ + +#endif
