Negocjowanie wersji interfejsu TAPI

Z czasem mogą istnieć różne wersje dla interfejsu TAPI, aplikacji i dostawców usług dla linii lub telefonu. Nowe wersje mogą definiować nowe funkcje, nowe pola do struktur danych itd. W związku z tym numery wersji wskazują, jak interpretować różne struktury danych.

Aby umożliwić optymalną współdziałanie różnych wersji aplikacji, wersji samego interfejsu TAPI i wersji dostawców usług przez różnych dostawców, interfejs TAPI zapewnia prosty, dwuetapowy mechanizm negocjacji wersji dla aplikacji. Dwie różne wersje muszą być uzgodnione przez aplikację, interfejs TAPI i dostawcę usług dla każdego urządzenia liniowego. Pierwszy to numer wersji dla telefonii podstawowej i dodatkowej i jest określany jako wersja interfejsu API. Druga dotyczy rozszerzeń specyficznych dla dostawcy, jeśli istnieją, i jest nazywana wersją rozszerzenia. Format struktur danych i typów danych używanych przez podstawowe i dodatkowe funkcje interfejsu TAPI jest definiowany przez wersję interfejsu API, podczas gdy wersja rozszerzenia określa format struktur danych zdefiniowanych przez rozszerzenia specyficzne dla dostawcy.

Negocjowanie wersji przebiega w dwóch fazach. W pierwszej fazie numer wersji interfejsu API jest negocjowany i uzyskiwany jest identyfikator rozszerzenia skojarzony z dowolnymi rozszerzeniami specyficznymi dla dostawcy obsługiwanymi na urządzeniu. W drugiej fazie negocjowana jest wersja rozszerzenia. Jeśli aplikacja nie używa żadnych rozszerzeń interfejsu API, pomija drugą fazę i rozszerzenia nie są aktywowane przez dostawcę usług. Jeśli aplikacja chce używać rozszerzeń, ale rozszerzenia dostawcy usług (identyfikator rozszerzenia) nie są rozpoznawane przez aplikację, aplikacja powinna pominąć negocjacje dotyczące wersji rozszerzenia. Każdy dostawca ma swój własny zestaw wersji prawnych (rozpoznanych) dla każdego zestawu specyfikacji rozszerzeń, które dystrybuuje.

Funkcja lineNegotiateAPIVersion służy do negocjowania numeru wersji interfejsu API do użycia. Pobiera również identyfikator rozszerzenia obsługiwany przez urządzenie liniowe, zwracając zera, jeśli nie są obsługiwane żadne rozszerzenia. W przypadku tego wywołania funkcji aplikacja udostępnia zakres wersji interfejsu API, z który jest zgodny. Interfejs TAPI z kolei negocjuje z dostawcą usług wiersza, aby określić, który zakres wersji interfejsu API obsługuje. Następnie interfejs TAPI wybiera numer wersji (zazwyczaj niekoniecznie najwyższy numer wersji) w nakładających się zakresach wersji dostarczonych przez aplikację, bibliotekę DLL i dostawcę usług. Ta liczba jest zwracana do aplikacji wraz z identyfikatorem rozszerzenia, który definiuje rozszerzenia dostępne u dostawcy usług tego wiersza.

Jeśli aplikacja chce użyć rozszerzeń zdefiniowanych przez zwrócony identyfikator rozszerzenia, musi najpierw wywołać lineNegotiateExtVersion, aby wynegocjować wersję rozszerzenia. W podobnej fazie negocjacji aplikacja określa już uzgodnioną wersję interfejsu API i zakres wersji rozszerzenia, który obsługuje. Interfejs TAPI przekazuje te informacje do dostawcy usług dla wiersza. Dostawca usług sprawdza wersję interfejsu API i zakres wersji rozszerzenia na własną rękę i wybiera odpowiedni numer wersji rozszerzenia, jeśli istnieje.

Gdy aplikacja później wywołuje lineGetDevCaps, zwraca zestaw możliwości urządzenia dla wiersza odpowiadającego wynikam negocjacji wersji. Obejmują one możliwości urządzenia linii zgodne z wersją interfejsu API i możliwościami specyficznymi dla urządzenia wiersza zgodnymi z wersją rozszerzenia. Aplikacja musi podać oba te numery wersji po otwarciu wiersza. W tym momencie aplikacja, biblioteka DLL i dostawca usług są zobowiązani do korzystania z uzgodnionych wersji. Jeśli rozszerzenia specyficzne dla urządzenia nie mają być używane, należy określić wersję rozszerzenia jako zero.

W środowisku, w którym wiele aplikacji otwiera to samo urządzenie liniowe, pierwsza aplikacja otwierająca urządzenie liniowe wybiera wersje dla wszystkich przyszłych aplikacji, które chcą używać wiersza (dostawcy usług nie obsługują jednocześnie wielu wersji). Podobnie aplikacja, która otwiera wiele urządzeń liniowych, może łatwiej obsługiwać wszystkie urządzenia liniowe pod tym samym numerem wersji interfejsu API.

Każda funkcja, która przyjmuje dwAPIVersion lub podobny parametr, musi ustawić ten parametr na najwyższą wersję interfejsu API obsługiwaną przez aplikację lub wersję interfejsu API wynegocjowaną przy użyciu funkcji lineNegotiateAPIVersion lub phoneNegotiateAPIVersion na określonym urządzeniu. Skorzystaj z poniższej tabeli jako przewodnika:

Funkcja Znaczenie
lineGetAddressCaps Użyj wersji zwróconej przez lineNegotiateAPIVersion.
lineGetCountry Użyj najwyższej wersji obsługiwanej przez aplikację.
lineGetDevCaps Użyj wersji zwróconej przez lineNegotiateAPIVersion.
lineGetProviderList Użyj najwyższej wersji obsługiwanej przez aplikację.
lineGetTranslateCaps Użyj najwyższej wersji obsługiwanej przez aplikację.
lineNegotiateAPIVersion Użyj najwyższej wersji obsługiwanej przez aplikację.
lineNegotiateExtVersion Użyj wersji zwróconej przez lineNegotiateAPIVersion.
wiersz Otwórz Użyj wersji zwróconej przez lineNegotiateAPIVersion.
lineTranslateAddress Użyj najwyższej wersji obsługiwanej przez aplikację.
lineTranslateDialog Użyj najwyższej wersji obsługiwanej przez aplikację.
phoneGetDevCaps Użyj wersji zwróconej przez phoneNegotiateAPIVersion.
phoneNegotiateAPIVersion Użyj najwyższej wersji obsługiwanej przez aplikację.
phoneNegotiateExtVersion Użyj wersji zwróconej przez phoneNegotiateAPIVersion.
telefonOtwórz Użyj wersji zwróconej przez phoneNegotiateAPIVersion.

 

Ważny

Podczas negocjowania wersji interfejsu API należy zawsze ustawić wysokie i niskie numery wersji na zakres wersji, które aplikacja może obsługiwać. Na przykład nigdy nie należy używać 0x00000000 dla wersji niskiej lub 0xFFFFFFFF dla wartości wysokich, ponieważ te wartości wymagają, aby aplikacja obsługiwała wszystkie wersje interfejsu TAPI, zarówno w przeszłości, jak i w przyszłości.