Direct2D 错误处理策略

本主题介绍 Direct2D 错误处理策略。 其中包含以下各节。

使用 HRESULT

如果函数未批处理并且可能具有运行时故障,则它应返回 HRESULT 以指示失败。 运行时故障是在设计时无法避免的任何故障,例如内存不足。

批处理函数的返回值

Direct2D 中的批处理函数是调用 EndDrawClose 时作为单个单元处理的函数。 它们是 BeginDrawEndDraw 之间的绘图命令或 GeometrySink 上的命令。 对于这些函数,批处理完成后会报告错误。 在用于绘图命令的 EndDrawGeometrySink的 Close 之后返回错误。

如果设置了错误状态,RenderTarget 将停止绘制,但应用程序可以调用 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}。