Direct2D 錯誤處理原則

本主題描述 Direct2D 錯誤處理原則。 包含以下幾節。

使用 HRESULT

如果未批次處理函式,而且可能會發生運行時失敗,它應該會傳回 HRESULT 來指出失敗。 執行時間失敗是無法在設計階段避免的任何失敗,例如記憶體不足。

Batched 函式的傳回值

Direct2D 中的批次函式是呼叫 EndDrawClose 時,以單一單位方式處理的函式。 它們是 BeginDrawEndDraw 之間的繪圖命令,或 GeometrySink上的命令。 針對這些函式,會在批次完成時回報錯誤。 在EndDraw進行繪圖命令之後,以及GeometrySinkClose之後,就會傳回錯誤。

如果設定錯誤狀態,RenderTargets 會停止繪圖,但應用程式可以呼叫 Flush 來重設錯誤狀態並繼續繪圖。

GetSet 函式沒有傳回值。 不過,如果 Set 函式有不正確輸入,偵錯層會產生訊息。 在此情況下,不會設定任何錯誤狀態, 而且 Set 函式不會執行任何動作。

輸入無效

Direct2D 會取值輸出指標和必要的參數,這會導致當指標無效或 Null時發生存取違規。

輸出指標

Direct2D 會取值輸出指標,並在輸入函式時立即將它指派給 Null 。 如果呼叫端以 Null 作為傳回值的指標傳遞 這會導致存取違規。 此原則也適用于指標陣列。 針對其他輸出參數,例如結構,稍後會發生取值,也會導致存取違規。 不過,有一些方法具有選擇性輸出指標 (,也就是 EndDrawFlush) ,這不會造成存取違規。

必要參數

如果 Null 傳遞至任何需要有效值的函式,則函式會提早取值不正確的指標,因而造成存取違規。 針對選擇性輸入參數, Null 是一個有效的值,會產生一些合理的預設值。

NaN 和排序不佳的輸入 RECT

在 Direct2D 中,NaN 會被視為有效的輸入,而且排序排序方式不佳的輸入 RECT。

NaN 作為輸入

NaN 被視為有效的輸入,但它通常會產生包含 NaN 而非繪圖的基本類型。 Direct2D API 不提供 NaN 的明確篩選來驗證輸入。

排序不佳的輸入 RECT

排序不佳的輸入 RECT,以便正確指定左上角和右下角。 針對輸出,空白矩形看起來像這樣:{Infinity、Infinity、FloatMax、FloatMax}。