#ifndef __ATLEXCEPT_H__ #define __ATLEXCEPT_H__ #ifdef _ATL_NO_EXCEPTIONS #if !defined(STATUS_NO_MEMORY) && defined(WIN32_NO_STATUS) #define STATUS_NO_MEMORY ((DWORD)0xC0000017) #endif #endif namespace ATL { //FIXME: Enable when RaiseException is marked as NORETURN //DECLSPEC_NORETURN inline void AtlThrowImp(HRESULT hr) { #ifdef ATLTRACE ATLTRACE(hr); #endif #ifdef _ATL_NO_EXCEPTIONS ATLASSERT(false); RaiseException( hr == E_OUTOFMEMORY ? STATUS_NO_MEMORY : EXCEPTION_ILLEGAL_INSTRUCTION, EXCEPTION_NONCONTINUABLE, 0, NULL ); #else // FIXME: This is horribly wrong, we should implement CException! throw; #endif } #ifndef AtlThrow #define AtlThrow(x) AtlThrowImp(x) #endif }; // namespace ATL #endif