Политики обработки ошибок Direct2D

В этом разделе описываются политики обработки ошибок Direct2D. В него входят следующие разделы.

Использование HRESULT

Если функция не является пакетной и может иметь сбой во время выполнения, она должна вернуть HRESULT , чтобы указать на сбой. Сбой во время выполнения — это любой сбой, который не может быть избежать во время разработки, например нехватка памяти.

Возвращаемое значение пакетных функций

Пакетные функции в Direct2D — это функции, которые обрабатываются как единое целое при вызове EndDraw или Close . Это команды рисования между BeginDraw и EndDraw или команды в GeometrySink. Для этих функций ошибки отображаются во время выполнения пакета. Ошибка возвращается после EndDraw для команд рисования и после Close для GeometrySink.

RenderTargets останавливает рисование, если задано состояние ошибки, но приложение может вызвать Flush для сброса состояния ошибки и возобновления рисования.

Функции Get и Set не имеют возвращаемого значения. Однако если функция Set имеет недопустимые входные данные, уровень отладки создает сообщение. В этом случае состояние ошибки не задано, а функция Set не выполняет никаких действий.

Недопустимые входные данные

Direct2D разыменовывает выходные указатели и обязательные параметры, что приводит к нарушениям доступа, если указатели недопустимы или имеют значение NULL.

Указатель вывода

Direct2D разыменовывает выходной указатель и присваивает ему значение NULL сразу после ввода функции. Это приводит к нарушению доступа, если вызывающий объект передает значение NULL в качестве указателя на возвращаемое значение. Эта политика также применяется к массивам указателей. Для других выходных параметров, таких как структура, разыменовка происходит позже, что также приводит к нарушению доступа. Однако некоторые методы имеют необязательные выходные указатели (т. е. EndDraw, Flush), которые не вызывают нарушения доступа.

Обязательный параметр

Если значение NULL передается какой-либо функции, для которой требуется допустимое значение, функция разыменовывает недопустимый указатель на раннем этапе, что приводит к нарушению доступа. Для необязательных входных параметров значение NULL является допустимым значением, которое приводит к некоторым разумным значениям по умолчанию.

Неупорядоченные и плохо упорядоченные входные rects

В Direct2D NaN считается допустимым входным значением, а неправильно упорядоченные входные RECT сортируются.

NaN в качестве входных данных

NaN считается допустимым входным данным, хотя обычно это приводит к тому, что примитив, содержащий NaN, не является рисованием. API Direct2D не обеспечивает явную фильтрацию NaN для проверки входных данных.

Неправильно упорядоченные входные rects

Неправильно упорядоченные входные RECT сортируются таким образом, что верхний, левый и нижний правые углы правильно указаны. Для выходных данных пустые прямоугольники выглядят следующим образом: {Infinity, Infinity, FloatMax, FloatMax}.