Share via


Richtlinien für die Direct2D-Fehlerbehandlung

In diesem Thema werden die Richtlinien für die Direct2D-Fehlerbehandlung beschrieben. Der Abschnitt ist wie folgt gegliedert.

Verwendung von HRESULT

Wenn eine Funktion nicht als Batch erstellt wird und einen Laufzeitfehler aufweisen kann, sollte sie HRESULT zurückgeben, um auf einen Fehler hinzuweisen. Ein Laufzeitfehler ist jeder Fehler, der zur Entwurfszeit nicht vermieden werden kann, z. B. nicht genügend Arbeitsspeicher.

Rückgabewert von Batchfunktionen

Batchfunktionen in Direct2D sind die Funktionen, die als einzelne Einheit verarbeitet werden, wenn EndDraw oder Close aufgerufen wird. Dies sind die Zeichenbefehle zwischen BeginDraw und EndDraw oder Befehle für GeometrySink. Für diese Funktionen werden Fehler gemeldet, wenn der Batch abgeschlossen ist. Der Fehler wird nach EndDraw für Zeichnungsbefehle und nach Schließen für GeometrySink zurückgegeben.

RenderTargets beendet das Zeichnen, wenn ein Fehlerzustand festgelegt ist, aber eine Anwendung kann Flush aufrufen, um den Fehlerzustand zurückzusetzen und das Zeichnen fortzusetzen.

Get - und Set-Funktionen haben keinen Rückgabewert. Wenn eine Set-Funktion jedoch über eine ungültige Eingabe verfügt, generiert die Debugebene eine Meldung. In diesem Fall wird kein Fehlerzustand festgelegt, und die Set-Funktion bewirkt nichts.

Ungültige Eingabe

Direct2D dereferenziert Ausgabezeiger und erforderliche Parameter, die zu Zugriffsverletzungen führen, wenn die Zeiger ungültig oder NULL sind.

Ausgabezeiger

Direct2D dereferenziert einen Ausgabezeiger und weist ihn sofort beim Eingeben der Funktion NULL zu. Dies verursacht eine Zugriffsverletzung, wenn ein Aufrufer NULL als Zeiger auf den Rückgabewert übergibt. Diese Richtlinie gilt auch für Arrays von Zeigern. Bei anderen Ausgabeparametern, z. B. einer Struktur, erfolgt die Dereferenzierung später und führt auch zu einer Zugriffsverletzung. Es gibt jedoch einige Methoden, die über optionale Ausgabezeiger (d. h. EndDraw, Flush) verfügen, die keine Zugriffsverletzung verursachen.

Erforderlicher Parameter

Wenn NULL an eine Funktion übergeben wird, die einen gültigen Wert erfordert, dereferenziert die Funktion den fehlerhaften Zeiger frühzeitig, was zu einer Zugriffsverletzung führt. Für optionale Eingabeparameter ist NULL ein gültiger Wert, der zu einem vernünftigen Standardwert führt.

NaN und schlecht sortierte Eingabe-RECTs

In Direct2D gilt NaN als gültige Eingabe, und schlecht sortierte Eingabe-RECTs werden sortiert.

NaN als Eingabe

NaN wird als gültige Eingabe betrachtet, führt jedoch in der Regel dazu, dass der Grundtyp, der die NaN nicht zeichnet, enthält. Die Direct2D-API bietet keine explizite Filterung von NaN zum Überprüfen der Eingabe.

Schlecht sortierte Eingabe-RECTs

Schlecht sortierte Eingabe-RECTs werden so sortiert, dass die oberen, linken und unteren, rechten Ecken richtig angegeben sind. Für die Ausgabe sehen leere Rechtecke wie folgt aus: {Infinity, Infinity, FloatMax, FloatMax}.