В библиотеке классов VCL Delphi класс исключений EOutOfResources определен как подкласс EOutOfMemory, который является подклассом EHeapException, который является подклассом базового класса исключений Exception. http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.Classes.EOutOfResources
Описание EOutOfResources гласит: «EOutOfResources вызывается, когда приложение пытается создать дескриптор Windows или виджета, и больше нет дескрипторов для выделения».
Описание EOutOfMemory гласит: «EOutOfMemory возникает, когда приложение пытается выделить динамическую память, но в системе недостаточно свободной памяти для удовлетворения запроса».
Для меня кучи памяти - это особый случай «ресурса», а дескрипторы Windows GDI имеют очень мало или вообще не имеют ничего общего с кучей памяти. Это в основном ошибка и ошибка моделирования? Или есть какой-нибудь способ достоверно узнать, было ли исключение на самом деле кучи? У вас есть специальный код для обработки всех типов исключений и игнорируется иерархия классов?
При обработке объекта Exception в обработчике исключений, даже если он «is-a EHeapException» в синтаксическом смысле языка, он может вообще не быть исключением, связанным с кучей, и корректирующие действия, которые необходимо выполнить, должны быть совершенно другими. Как это выглядит, я не могу использовать оператор «is» даже для работы с ошибками, вызванными VCL, не говоря уже о сторонних компонентах, которые кажутся более расслабленными, когда дело доходит до моделирования ситуаций ошибок с исключениями.