Согласование версий 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, поддерживаемую приложением, либо версию API, согласованную с помощью функции lineNegotiateAPIVersion или phoneNegotiateAPIVersion на определенном устройстве. Руководствуйтесь следующей таблицей.
Функция | Значение |
---|---|
lineGetAddressCaps | Используйте версию, возвращаемую lineNegotiateAPIVersion. |
lineGetCountry | Используйте самую высокую версию, поддерживаемую приложением. |
lineGetDevCaps | Используйте версию, возвращаемую lineNegotiateAPIVersion. |
lineGetProviderList | Используйте самую высокую версию, поддерживаемую приложением. |
lineGetTranslateCaps | Используйте самую высокую версию, поддерживаемую приложением. |
lineNegotiateAPIVersion | Используйте самую высокую версию, поддерживаемую приложением. |
lineNegotiateExtVersion | Используйте версию, возвращаемую lineNegotiateAPIVersion. |
LineОткрыть | Используйте версию, возвращаемую lineNegotiateAPIVersion. |
lineTranslateAddress | Используйте самую высокую версию, поддерживаемую приложением. |
lineTranslateDialog | Используйте самую высокую версию, поддерживаемую приложением. |
phoneGetDevCaps | Используйте версию, возвращаемую phoneNegotiateAPIVersion. |
phoneNegotiateAPIVersion | Используйте самую высокую версию, поддерживаемую приложением. |
phoneNegotiateExtVersion | Используйте версию, возвращаемую phoneNegotiateAPIVersion. |
phoneОткрыть | Используйте версию, возвращаемую phoneNegotiateAPIVersion. |
Важно!
При согласовании версии API всегда устанавливайте высокие и низкие номера версий в диапазоне версий, которые может поддерживать приложение. Например, никогда не используйте 0x00000000 для низкой версии или 0xFFFFFFFF для высокой, так как эти значения требуют, чтобы приложение поддерживало все версии TAPI, как прошлые, так и будущие.