TAPI 版本协商
随着时间的推移,TAPI、应用程序和线路或电话的服务提供商可能会存在不同的版本。 新版本可以定义新功能、数据结构的新字段等。 因此,版本号指示如何解释各种数据结构。
为了允许不同供应商在不同版本的应用程序、TAPI 本身版本以及服务提供商版本之间实现最佳互操作性,TAPI 为应用程序提供了简单的两步版本协商机制。 每个线路设备的应用程序 TAPI 和服务提供商必须就两个不同的版本达成一致。 第一个是基本和补充电话的版本号,称为 API 版本。 另一个用于提供程序特定的扩展(如果有),称为扩展版本。 TAPI 的基本功能和补充功能使用的数据结构和数据类型的格式由 API 版本定义,而扩展版本确定供应商特定扩展定义的数据结构的格式。
版本协商分两个阶段进行。 在第一阶段,将协商 API 版本号,并获取与设备上支持的任何特定于供应商的扩展关联的扩展标识符。 在第二阶段,将协商扩展版本。 如果应用程序不使用任何 API 扩展,则会跳过第二阶段,并且服务提供商不会激活扩展。 如果应用程序确实想要使用扩展,但服务提供商的扩展 (扩展标识符) 应用程序无法识别,则应用程序还应跳过扩展版本的协商。 对于它分发的每组扩展规范,每个供应商都有自己的一组法律 (认可的) 版本。
lineNegotiateAPIVersion 函数用于协商要使用的 API 版本号。 它还检索线路设备支持的扩展标识符,如果未支持任何扩展,则返回零。 通过此函数调用,应用程序将提供它与之兼容的 API 版本范围。 TAPI 反过来会与线路的服务提供商协商,以确定它支持的 API 版本范围。 接下来,TAPI 选择一个版本号 (通常(尽管不一定)是应用程序、DLL 和服务提供商提供的重叠版本范围内的最高版本号) 。 此数字将返回给应用程序,以及定义该线路的服务提供商提供的扩展的扩展的扩展标识符。
如果应用程序要使用返回的扩展标识符定义的扩展,则必须首先调用 lineNegotiateExtVersion 来协商扩展版本。 在类似的协商阶段,应用程序指定已商定的 API 版本及其支持的扩展版本范围。 TAPI 将此信息传递给线路的服务提供商。 服务提供商根据自己的 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,无论是过去版本还是将来版本。