TAPI-Versionsverhandlung
Im Laufe der Zeit können verschiedene Versionen für TAPI, Anwendungen und Dienstanbieter für eine Leitung oder ein Telefon vorhanden sein. Neue Versionen können neue Features, neue Felder für Datenstrukturen usw. definieren. Versionsnummern geben daher an, wie verschiedene Datenstrukturen interpretiert werden.
Um eine optimale Interoperabilität verschiedener Versionen von Anwendungen, Versionen von TAPI selbst und Versionen von Dienstanbietern verschiedener Anbieter zu ermöglichen, bietet TAPI einen einfachen, zweistufigen Versionsaushandlungsmechanismus für Anwendungen. Zwei verschiedene Versionen müssen von der Anwendung, TAPI und dem Dienstanbieter für jedes Liniengerät vereinbart werden. Die erste ist die Versionsnummer für die Grundlegende und ergänzende Telefonie und wird als API-Version bezeichnet. Die andere ist für anbieterspezifische Erweiterungen, falls vorhanden, und wird als Erweiterungsversion bezeichnet. Das Format der Datenstrukturen und Datentypen, die von den grundlegenden und ergänzenden Features von TAPI verwendet werden, wird durch die API-Version definiert, während die Erweiterungsversion das Format der datenstrukturen bestimmt, die von den anbieterspezifischen Erweiterungen definiert werden.
Die Versionsaushandlung wird in zwei Phasen fortgesetzt. In der ersten Phase wird die API-Versionsnummer ausgehandelt, und der Erweiterungsbezeichner, der allen anbieterspezifischen Erweiterungen zugeordnet ist, die auf dem Gerät unterstützt werden. In der zweiten Phase wird die Erweiterungsversion ausgehandelt. Wenn die Anwendung keine API-Erweiterungen verwendet, überspringt sie die zweite Phase, und Erweiterungen werden vom Dienstanbieter nicht aktiviert. Wenn die Anwendung Erweiterungen verwenden möchte, aber die Erweiterungen des Dienstanbieters (der Erweiterungsbezeichner) von der Anwendung nicht erkannt werden, sollte die Anwendung auch die Aushandlung für die Erweiterungsversion überspringen. Jeder Anbieter verfügt über eigene rechtliche (anerkannte) Versionen für jeden Satz von Erweiterungsspezifikationen, die er verteilt.
Die lineNegotiateAPIVersion--Funktion wird verwendet, um die zu verwendende API-Versionsnummer auszuhandeln. Außerdem wird der vom Zeilengerät unterstützte Erweiterungsbezeichner abgerufen, wobei Nullen zurückgegeben werden, wenn keine Erweiterungen unterstützt werden. Mit diesem Funktionsaufruf stellt die Anwendung den API-Versionsbereich bereit, mit dem sie kompatibel ist. TAPI verhandelt wiederum mit dem Dienstanbieter der Zeile, um zu bestimmen, welcher API-Versionsbereich unterstützt wird. TAPI wählt als Nächstes eine Versionsnummer (normalerweise nicht unbedingt die höchste Versionsnummer) im überlappenden Versionsbereich aus, den die Anwendung, die DLL und den Dienstanbieter bereitgestellt haben. Diese Zahl wird an die Anwendung zurückgegeben, zusammen mit dem Erweiterungsbezeichner, der die erweiterungen definiert, die vom Dienstanbieter dieser Zeile verfügbar sind.
Wenn die Anwendung die durch den zurückgegebenen Erweiterungsbezeichner definierten Erweiterungen verwenden möchte, muss sie zuerst lineNegotiateExtVersion aufrufen, um die Erweiterungsversion auszuhandeln. In einer ähnlichen Aushandlungsphase gibt die Anwendung die bereits vereinbarte API-Version und den unterstützten Erweiterungsversionsbereich an. TAPI übergibt diese Informationen an den Dienstanbieter für die Zeile. Der Dienstanbieter überprüft die API-Version und den Erweiterungsversionsbereich anhand seines eigenen Bereichs und wählt die entsprechende Erweiterungsversionsnummer aus, sofern vorhanden.
Wenn die Anwendung später lineGetDevCapsaufruft, gibt sie eine Reihe von Gerätefunktionen für die Zeile zurück, die den Ergebnissen der Versionsaushandlung entspricht. Dazu gehören die Gerätefunktionen der Zeile, die mit der API-Version und den gerätespezifischen Funktionen der Zeile konsistent mit der Erweiterungsversion sind. Die Anwendung muss beim Öffnen einer Zeile beide Versionsnummern angeben. Zu diesem Zeitpunkt sind die Anwendung, die DLL und der Dienstanbieter verpflichtet, die vereinbarten Versionen zu verwenden. Wenn gerätespezifische Erweiterungen nicht verwendet werden sollen, sollte die Erweiterungsversion als Null angegeben werden.
In einer Umgebung, in der mehrere Anwendungen dasselbe Zeilengerät öffnen, wählt die erste Anwendung zum Öffnen des Zeilengeräts die Versionen für alle zukünftigen Anwendungen aus, die die Zeile verwenden möchten (Dienstanbieter unterstützen nicht mehrere Versionen gleichzeitig.) Ebenso kann eine Anwendung, die mehrere Leitungsgeräte öffnet, möglicherweise einfacher finden, alle Zeilengeräte unter derselben API-Versionsnummer zu bedienen.
Jede Funktion, die eine dwAPIVersion oder einen ähnlichen Parameter verwendet, muss diesen Parameter entweder auf die höchste API-Version festlegen, die von der Anwendung unterstützt wird, oder die API-Version, die mit der lineNegotiateAPIVersion oder phoneNegotiateAPIVersion Funktion auf einem bestimmten Gerät ausgehandelt wurde. Verwenden Sie die folgende Tabelle als Leitfaden:
Funktion | Bedeutung |
---|---|
lineGetAddressCaps | Verwenden Sie die von lineNegotiateAPIVersionzurückgegebene Version. |
lineGetCountry- | Verwenden Sie die höchste version, die von der Anwendung unterstützt wird. |
lineGetDevCaps | Verwenden Sie die von lineNegotiateAPIVersionzurückgegebene Version. |
lineGetProviderList- | Verwenden Sie die höchste version, die von der Anwendung unterstützt wird. |
lineGetTranslateCaps- | Verwenden Sie die höchste version, die von der Anwendung unterstützt wird. |
lineNegotiateAPIVersion | Verwenden Sie die höchste version, die von der Anwendung unterstützt wird. |
lineNegotiateExtVersion | Verwenden Sie die von lineNegotiateAPIVersionzurückgegebene Version. |
lineOpen- | Verwenden Sie die von lineNegotiateAPIVersionzurückgegebene Version. |
lineTranslateAddress- | Verwenden Sie die höchste version, die von der Anwendung unterstützt wird. |
lineTranslateDialog- | Verwenden Sie die höchste version, die von der Anwendung unterstützt wird. |
phoneGetDevCaps | Verwenden Sie die von phoneNegotiateAPIVersionzurückgegebene Version. |
phoneNegotiateAPIVersion | Verwenden Sie die höchste version, die von der Anwendung unterstützt wird. |
phoneNegotiateExtVersion | Verwenden Sie die von phoneNegotiateAPIVersionzurückgegebene Version. |
phoneOpen | Verwenden Sie die von phoneNegotiateAPIVersionzurückgegebene Version. |
Wichtig
Wenn Sie eine API-Version aushandeln, legen Sie immer die Nummern mit hoher und niedriger Version auf den Bereich der Versionen fest, die Ihre Anwendung unterstützen kann. Verwenden Sie beispielsweise niemals 0x00000000 für die niedrige Version oder 0xFFFFFFFF für die Hohe, da diese Werte erfordern, dass Ihre Anwendung alle Versionen von TAPI unterstützt, sowohl in der Vergangenheit als auch in zukunft.