使用安全数组的最佳做法

Microsoft UI 自动化 API 的许多接口方法采用名为 SAFEARRAY 数据类型的安全数组的参数。 本主题介绍在UI 自动化应用程序中使用安全数组的最佳做法。

客户端

与 UI 自动化 客户端 API 方法一起使用的所有安全数组都是从零开始的一维数组。 若要为 UI 自动化 客户端方法创建安全数组,请使用 SafeArrayCreateVector 函数,若要从安全数组读取和写入安全数组,请使用 SafeArrayGetElementSafeArrayPutElement 函数。 使用完安全数组后,始终使用 SafeArrayDestroy 函数销毁它,无论是创建安全数组还是从UI 自动化客户端方法接收它。

几种UI 自动化方法(包括 GetCurrentPropertyValue 等属性检索方法)检索可以包含 POINTUiaRect 结构的 VARIANTPOINT 作为安全双精度数组打包到 VARIANT 中, (VT_R8) 索引为 0 处的 x 成员,索引为 1 处的 y 成员。 同样, UiaRect 作为安全双精度值数组打包到 VARIANT 中,其 左侧顶部宽度高度 成员分别位于索引 0 到 3。 对于 UiaRect 结构的数组,安全数组包含每个 UiaRect 的四个双精度序列数组。 第一个 UiaRect成员、顶部成员、宽度成员和高度成员占据索引 0 到 3,第二个矩形的成员占据索引 4 到 7,依此而论。

IUIAutomation 接口包含以下方法,用于在 SAFEARRAY 和其他各种数据类型之间进行转换。

方法 说明
IUIAutomation::IntNativeArrayToSafeArray 将整数数组转换为 SAFEARRAY
IUIAutomation::IntSafeArrayToNativeArray SAFEARRAY 的整数转换为数组。
IUIAutomation::SafeArrayToRectNativeArray 将包含矩形坐标的 SAFEARRAY 转换为 RECT 类型的数组。

 

提供程序

提供程序必须实现许多接口方法,这些方法UI 自动化调用从提供程序检索信息。 很多时候,此信息由值数组组成。 若要将数组返回到UI 自动化,提供程序必须将该数组打包到 SAFEARRAY 结构中。 数组元素必须是预期的数据类型,并且必须按预期顺序显示。

概念性

UI 自动化属性概述

UI 自动化基础知识