Index: reactos/dll/win32/shell32/CMakeLists.txt =================================================================== --- reactos/dll/win32/shell32/CMakeLists.txt (revision 72405) +++ reactos/dll/win32/shell32/CMakeLists.txt (working copy) @@ -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 Index: reactos/sdk/lib/atl/atlexcept.h =================================================================== --- reactos/sdk/lib/atl/atlexcept.h (nonexistent) +++ reactos/sdk/lib/atl/atlexcept.h (working copy) @@ -0,0 +1,36 @@ + +#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 + + 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 Index: reactos/sdk/lib/atl/atlsimpstr.h =================================================================== --- reactos/sdk/lib/atl/atlsimpstr.h (revision 72405) +++ reactos/sdk/lib/atl/atlsimpstr.h (working copy) @@ -4,8 +4,8 @@ #pragma once #include +#include - namespace ATL { struct CStringData; @@ -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); + } + }; }