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 版本,或在特定裝置上使用 lineNegotiateAPIVersionphoneNegotiateAPIVersion 函式交涉的 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 版本。