TAPI 版本协商
随着时间的推移,对于电话或电话的 TAPI、应用程序和服务提供商,可能存在不同的版本。 新版本可以定义新功能、数据结构的新字段等。 因此,版本号指示如何解释各种数据结构。
为了允许不同版本的应用程序、TAPI 版本和不同供应商提供的服务提供商版本实现最佳互作性,TAPI 为应用程序提供了简单的双重版本协商机制。 应用程序、TAPI 和每个线路设备的服务提供商必须同意两个不同的版本。 第一个是基本和补充电话的版本号,称为 API 版本。 另一个用于提供程序特定的扩展(如果有),称为扩展版本。 TAPI 的基本功能和补充功能使用的数据结构和数据类型的格式由 API 版本定义,而扩展版本确定供应商特定扩展定义的数据结构的格式。
版本协商分两个阶段进行。 在第一阶段中,会协商 API 版本号,并获取与设备上支持的任何特定于供应商的扩展关联的扩展标识符。 在第二阶段,将协商扩展版本。 如果应用程序不使用任何 API 扩展,它将跳过第二个阶段,并且服务提供商不会激活扩展。 如果应用程序确实想要使用扩展,但应用程序无法识别服务提供商的扩展(扩展标识符),则应用程序还应跳过扩展版本的协商。 每个供应商都有自己的一组法律版本(已识别)版本,适用于它分发的每个扩展规范集。
lineNegotiateAPIVersion 函数用于协商要使用的 API 版本号。 它还检索行设备支持的扩展标识符,如果未支持任何扩展,则返回零。 通过此函数调用,应用程序提供其兼容的 API 版本范围。 TAPI 反过来会与该行的服务提供商协商,以确定它支持的 API 版本范围。 TAPI 接下来选择版本号(通常不一定是应用程序、DLL 和服务提供商提供的重叠版本范围中的最高版本号)。 此数字将返回到应用程序,以及定义该行服务提供商提供的扩展的扩展的扩展标识符。
如果应用程序要使用返回的扩展标识符定义的扩展,则必须首先调用 lineNegotiateExtVersion 来协商扩展版本。 在类似的协商阶段,应用程序指定已商定的 API 版本和它支持的扩展版本范围。 TAPI 将此信息传递给线路的服务提供商。 服务提供商会根据自己的 API 版本和扩展版本范围检查 API 版本,并选择相应的扩展版本号(如果存在)。
当应用程序稍后调用 lineGetDevCaps时,它将为与版本协商结果对应的行返回一组设备功能。 其中包括与 API 版本一致的行设备功能,以及该行的设备特定功能与扩展版本一致。 应用程序在打开行时必须指定这两个版本号。 此时,应用程序、DLL 和服务提供商将承诺使用商定的版本。 如果未使用特定于设备的扩展,应将扩展版本指定为零。
在多个应用程序打开同一行设备的环境中,第一个打开行设备的应用程序会为想要使用该行的所有未来应用程序选择版本(服务提供商同时不支持多个版本)。同样,打开多行设备的应用程序可能会发现更容易在同一 API 版本号下运行所有行设备。
采用 dwAPIVersion 或类似参数的每个函数都必须将此参数设置为应用程序支持的最高 API 版本,或者使用特定设备上的 lineNegotiateAPIVersion 或 phoneNegotiateAPIVersion 函数协商的 API 版本。 使用下表作为指南:
功能 | 意义 |
---|---|
lineGetAddressCaps | 使用由 lineNegotiateAPIVersion返回的版本。 |
lineGetCountry | 使用应用程序支持的最高版本。 |
lineGetDevCaps | 使用由 lineNegotiateAPIVersion返回的版本。 |
lineGetProviderList | 使用应用程序支持的最高版本。 |
lineGetTranslateCaps | 使用应用程序支持的最高版本。 |
lineNegotiateAPIVersion | 使用应用程序支持的最高版本。 |
lineNegotiateExtVersion | 使用由 lineNegotiateAPIVersion返回的版本。 |
lineOpen | 使用由 lineNegotiateAPIVersion返回的版本。 |
lineTranslateAddress | 使用应用程序支持的最高版本。 |
lineTranslateDialog | 使用应用程序支持的最高版本。 |
phoneGetDevCaps | 使用由 phoneNegotiateAPIVersion返回的版本。 |
phoneNegotiateAPIVersion | 使用应用程序支持的最高版本。 |
phoneNegotiateExtVersion | 使用由 phoneNegotiateAPIVersion返回的版本。 |
phoneOpen | 使用由 phoneNegotiateAPIVersion返回的版本。 |
重要
协商 API 版本时,始终将高版本号和低版本号设置为应用程序可以支持的版本范围。 例如,切勿将0x00000000用于低版本或0xFFFFFFFF,因为这些值要求应用程序支持所有版本的 TAPI,无论是过去还是将来。