Direct2D 错误处理策略
本主题介绍 Direct2D 错误处理策略。 其中包含以下各节。
使用 HRESULT
如果函数未批处理并且可能具有运行时故障,则它应返回 HRESULT 以指示失败。 运行时故障是在设计时无法避免的任何故障,例如内存不足。
批处理函数的返回值
Direct2D 中的批处理函数是调用 EndDraw 或 Close 时作为单个单元处理的函数。 它们是 BeginDraw 和 EndDraw 之间的绘图命令或 GeometrySink 上的命令。 对于这些函数,批处理完成后会报告错误。 在用于绘图命令的 EndDraw 和 GeometrySink的 Close 之后返回错误。
如果设置了错误状态,RenderTarget 将停止绘制,但应用程序可以调用 Flush 来重置错误状态并恢复绘图。
Get 和 Set 函数没有返回值。 但是,如果 Set 函数的输入无效,则调试层将生成一条消息。 在这种情况下,未设置错误状态, Set 函数不执行任何操作。
输入无效
Direct2D 取消引用输出指针和必需的参数,当指针无效或 为 NULL 时会导致访问冲突。
输出指针
Direct2D 取消引用输出指针,并在进入函数时立即将其分配给 NULL 。 如果调用方将 NULL 作为指向返回值的指针传递,则会导致访问冲突。 此策略也适用于指针数组。 对于其他输出参数(如结构),取消引用会在稍后发生,还会导致访问冲突。 但是,某些方法具有可选的输出指针 (即 EndDraw、 Flush) ,这不会导致访问冲突。
必需参数
如果将 NULL 传递给任何需要有效值的函数,则该函数会提前取消引用错误的指针,从而导致访问冲突。 对于可选输入参数, NULL 是一个有效的值,可产生一些合理的默认值。
NaN 和低序输入 RECT
在 Direct2D 中,NaN 被视为有效输入,排序顺序不佳的输入 RECT。
NaN 作为输入
NaN 被视为有效的输入,但它通常会导致包含 NaN 的基元而不是绘图。 Direct2D API 不提供 NaN 的显式筛选来验证输入。
输入 RECT 顺序不佳
排序不善的输入 RECT,以便正确指定顶部、左、下、右角。 对于输出,空矩形如下所示:{Infinity,Infinity,FloatMax,FloatMax}。