一段時間后,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 版本時,請一律將高和低版本號碼設定為應用程式可支援的版本範圍。 例如,請勿針對低版本或高0xFFFFFFFF使用0x00000000,因為這些值需要您的應用程式支援所有版本的TAPI,無論是過去還是未來。