Author: mjansen Date: Mon Aug 29 12:29:45 2016 New Revision: 72499
URL: http://svn.reactos.org/svn/reactos?rev=72499&view=rev Log: [ATL][SHELL32] Add basic support for _ATL_NO_EXCEPTIONS in CString, use it in shell32 so that we can link without exception support. CORE-11841 #comment Please retest!
Added: trunk/reactos/sdk/lib/atl/atlexcept.h (with props) Modified: trunk/reactos/dll/win32/shell32/CMakeLists.txt trunk/reactos/sdk/lib/atl/atlsimpstr.h
Modified: trunk/reactos/dll/win32/shell32/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/CMakeList... ============================================================================== --- trunk/reactos/dll/win32/shell32/CMakeLists.txt [iso-8859-1] (original) +++ trunk/reactos/dll/win32/shell32/CMakeLists.txt [iso-8859-1] Mon Aug 29 12:29:45 2016 @@ -4,7 +4,7 @@ add_subdirectory(shellmenu) add_subdirectory(shellrecyclebin)
-set_cpp(WITH_RUNTIME WITH_EXCEPTIONS) +set_cpp(WITH_RUNTIME) spec2def(shell32.dll shell32.spec ADD_IMPORTLIB)
if(NOT MSVC) @@ -17,7 +17,8 @@
add_definitions( -D_SHELL32_ - -D_WINE) + -D_WINE + -D_ATL_NO_EXCEPTIONS)
include_directories( ${REACTOS_SOURCE_DIR}/sdk/lib/atl
Added: trunk/reactos/sdk/lib/atl/atlexcept.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/lib/atl/atlexcept.h?rev... ============================================================================== --- trunk/reactos/sdk/lib/atl/atlexcept.h (added) +++ trunk/reactos/sdk/lib/atl/atlexcept.h [iso-8859-1] Mon Aug 29 12:29:45 2016 @@ -0,0 +1,38 @@ + +#ifndef __ATLEXCEPT_H__ +#define __ATLEXCEPT_H__ + + +//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 + +#endif
Propchange: trunk/reactos/sdk/lib/atl/atlexcept.h ------------------------------------------------------------------------------ svn:eol-style = native
Modified: trunk/reactos/sdk/lib/atl/atlsimpstr.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/sdk/lib/atl/atlsimpstr.h?re... ============================================================================== --- trunk/reactos/sdk/lib/atl/atlsimpstr.h [iso-8859-1] (original) +++ trunk/reactos/sdk/lib/atl/atlsimpstr.h [iso-8859-1] Mon Aug 29 12:29:45 2016 @@ -4,7 +4,7 @@ #pragma once
#include <atlcore.h> - +#include <atlexcept.h>
namespace ATL { @@ -485,7 +485,7 @@ CStringData* pNewData = pOldData->pStringMgr->Clone()->Allocate(nLength, sizeof(XCHAR)); if (pNewData == NULL) { - throw; // ThrowMemoryException(); + ThrowMemoryException(); } int nCharsToCopy = ((nOldLength < nLength) ? nOldLength : nLength) + 1; CopyChars(PXSTR(pNewData->data()), nCharsToCopy, @@ -550,7 +550,7 @@ CStringData* pNewData = pStringMgr->Reallocate(pOldData, nLength, sizeof(XCHAR)); if (pNewData == NULL) { - throw; // ThrowMemoryException(); + ThrowMemoryException(); }
Attach(pNewData); @@ -562,7 +562,9 @@ ATLASSERT(nLength <= GetData()->nAllocLength);
if (nLength < 0 || nLength > GetData()->nAllocLength) - throw; + { + AtlThrow(E_INVALIDARG); + }
GetData()->nDataLength = nLength; m_pszData[nLength] = 0; @@ -583,7 +585,7 @@ pNewData = pNewStringMgr->Allocate(pData->nDataLength, sizeof(XCHAR)); if (pNewData == NULL) { - throw; // ThrowMemoryException(); + ThrowMemoryException(); }
pNewData->nDataLength = pData->nDataLength; @@ -594,6 +596,12 @@ return pNewData; }
+ + static void ThrowMemoryException() + { + AtlThrow(E_OUTOFMEMORY); + } + }; }