TAPI Sürüm Anlaşması

Zaman içinde, bir hat veya telefon için TAPI, uygulamalar ve hizmet sağlayıcıları için farklı sürümler bulunabilir. Yeni sürümler yeni özellikler, veri yapılarında yeni alanlar vb. tanımlayabilir. Bu nedenle sürüm numaraları çeşitli veri yapılarını yorumlamayı gösterir.

TAPI, farklı uygulamaların farklı sürümlerinin, TAPI sürümlerinin ve farklı satıcıların hizmet sağlayıcılarının sürümlerinin en iyi şekilde birlikte çalışabilmesini sağlamak için, uygulamalar için basit, iki adımlı bir sürüm anlaşması mekanizması sağlar. Her hat cihazı için uygulama, TAPI ve hizmet sağlayıcısı tarafından iki farklı sürüm üzerinde anlaşmaya varılması gerekir. Birincisi, Temel ve Tamamlayıcı Telefon sürüm numarasıdır ve API sürümü olarak adlandırılır. Diğeri ise sağlayıcıya özgü uzantılar (varsa) içindir ve uzantı sürümü olarak adlandırılır. TAPI'nin temel ve tamamlayıcı özellikleri tarafından kullanılan veri yapılarının ve veri türlerinin biçimi API sürümü tarafından tanımlanırken, uzantı sürümü satıcıya özgü uzantılar tarafından tanımlanan veri yapılarının biçimini belirler.

Sürüm anlaşması iki aşamada devam eder. İlk aşamada API sürüm numarası üzerinde anlaşmaya varılır ve cihazda desteklenen satıcıya özgü uzantılarla ilişkili uzantı tanımlayıcısı elde edilir. İkinci aşamada uzantı sürümü belirlenir. Uygulama herhangi bir API uzantısı kullanmıyorsa ikinci aşamayı atlar ve uzantılar hizmet sağlayıcısı tarafından etkinleştirilmez. Uygulama uzantıları kullanmak istiyor, ancak hizmet sağlayıcısının uzantıları (uzantı tanımlayıcısı) uygulama tarafından tanınmıyorsa, uygulama uzantı sürümü için de anlaşma atlamalıdır. Her satıcının dağıttığını her uzantı belirtimi kümesi için kendi yasal (tanınan) sürümleri vardır.

lineNegotiateAPIVersion işlevi, kullanılacak API sürüm numarasıyla anlaşmak için kullanılır. Ayrıca, hat cihazı tarafından desteklenen uzantı tanımlayıcısını alır ve hiçbir uzantı desteklenmiyorsa sıfır döndürür. Bu işlev çağrısıyla uygulama, uyumlu olduğu API sürüm aralığını sağlar. TAPI de hangi API sürüm aralığını desteklediğini belirlemek için satırın hizmet sağlayıcısıyla görüşür. TAPI daha sonra uygulamanın, DLL'nin ve hizmet sağlayıcısının sağladığı çakışan sürüm aralığında bir sürüm numarası (genellikle en yüksek sürüm numarası olmasa da) seçer. Bu numara, söz konusu satırın hizmet sağlayıcısından kullanılabilir uzantıları tanımlayan uzantı tanımlayıcısıyla birlikte uygulamaya döndürülür.

Uygulama, döndürülen uzantı tanımlayıcısı tarafından tanımlanan uzantıları kullanmak istiyorsa, uzantı sürümünü anlaşmak için önce lineNegotiateExtVersion çağrısı yapmalıdır. Benzer bir anlaşma aşamasında, uygulama zaten üzerinde anlaşmaya varılmış API sürümünü ve desteklediği uzantı sürümü aralığını belirtir. TAPI, bu bilgileri satırın hizmet sağlayıcısına geçirir. Hizmet sağlayıcısı API sürümünü ve uzantı sürümü aralığını kendi başına denetler ve varsa uygun uzantı sürüm numarasını seçer.

Uygulama daha sonra lineGetDevCapsçağırdığında, satır için sürüm anlaşması sonuçlarına karşılık gelen bir cihaz özellikleri kümesi döndürür. Bunlar, satırın API sürümüyle tutarlı cihaz özelliklerini ve uzantı sürümüyle tutarlı olan hattın cihaza özgü özelliklerini içerir. Uygulama bir satır açtığında bu sürüm numaralarının ikisini de belirtmelidir. Bu noktada uygulama, DLL ve hizmet sağlayıcısı üzerinde anlaşmaya varılan sürümleri kullanmaya kararlıdır. Cihaza özgü uzantılar kullanılmıyorsa uzantı sürümü sıfır olarak belirtilmelidir.

Birden çok uygulamanın aynı satır cihazını açtığı bir ortamda, çizgi cihazını açan ilk uygulama, hattı kullanmak isteyen gelecekteki tüm uygulamalar için sürümleri seçer (hizmet sağlayıcıları aynı anda birden çok sürümü desteklemez.) Benzer şekilde, birden çok satır cihazı açan bir uygulama, tüm satır cihazlarını aynı API sürüm numarası altında çalıştırmayı daha kolay bulabilir.

dwAPIVersion veya benzer bir parametre alan her işlev, bu parametreyi uygulama tarafından desteklenen en yüksek API sürümüne veya belirli bir cihazdaki lineNegotiateAPIVersion veya phoneNegotiateAPIVersion işlevi kullanılarak anlaşmaya varılan API sürümüne ayarlamalıdır. Kılavuz olarak aşağıdaki tabloyu kullanın:

Fonksiyon Anlam
lineGetAddressCaps lineNegotiateAPIVersiontarafından döndürülen sürümü kullanın.
lineGetCountry Uygulama tarafından desteklenen en yüksek sürümü kullanın.
lineGetDevCaps lineNegotiateAPIVersiontarafından döndürülen sürümü kullanın.
lineGetProviderList Uygulama tarafından desteklenen en yüksek sürümü kullanın.
lineGetTranslateCaps Uygulama tarafından desteklenen en yüksek sürümü kullanın.
lineNegotiateAPIVersion Uygulama tarafından desteklenen en yüksek sürümü kullanın.
lineNegotiateExtVersion lineNegotiateAPIVersiontarafından döndürülen sürümü kullanın.
lineOpen lineNegotiateAPIVersiontarafından döndürülen sürümü kullanın.
lineTranslateAddress Uygulama tarafından desteklenen en yüksek sürümü kullanın.
lineTranslateDialog Uygulama tarafından desteklenen en yüksek sürümü kullanın.
phoneGetDevCaps phoneNegotiateAPIVersiontarafından döndürülen sürümü kullanın.
phoneNegotiateAPIVersion Uygulama tarafından desteklenen en yüksek sürümü kullanın.
phoneNegotiateExtVersion phoneNegotiateAPIVersiontarafından döndürülen sürümü kullanın.
telefonu aç phoneNegotiateAPIVersiontarafından döndürülen sürümü kullanın.

 

Önemli

API sürümü anlaşması yaparken, her zaman yüksek ve düşük sürüm numaralarını uygulamanızın destekleyebilecekleri sürüm aralığına ayarlayın. Örneğin, düşük sürüm için 0x00000000 veya yüksek sürüm için 0xFFFFFFFF kullanmayın çünkü bu değerler uygulamanızın hem geçmiş hem de gelecekteki tüm TAPI sürümlerini desteklemesini gerektirir.