電話語音 API (架構)
下圖顯示電話語音服務提供者及其相關聯使用者介面動態連結程式庫的一般架構, (UI DLL) 。
服務提供者包含至少兩個元件。 此服務提供者 DLL (圖中指定為 MAIN。TSP) 會在 TAPISRV 程式的內容中執行,並執行與特定應用程式 (使用裝置相關聯之使用者介面元素相關的服務提供者的所有工作,且最可能與圖例) 所示的較低層級元件搭配使用。 但不同于舊版 TAPI,其中使用者介面程式碼已整合至服務提供者, (並執行,因為先前的架構是在應用程式) 的內容中,服務提供者現在必須包含實作使用者介面元素的個別元件。
當應用程式呼叫產生 UI 的 TAPI 函式時,服務提供者 UI DLL 必須匯出 TAPI 所呼叫的函式:TUISPI_lineConfigDialog、TUISPI_lineConfigDialogEdit、TUISPI_phoneConfigDialog、TUISPI_providerConfig、TUISPI_providerInstall和TUISPI_providerRemove。 這些函式都包含作為 TAPI 中回呼函式指標的參數,其類型 為 TUISPIDLLCALLBACK,UI DLL 可用來雙向通訊, (傳送和接收資料) 在 TAPISRV 程式中執行的服務提供者 DLL。 如果服務提供者一直產生不正常 UI,例如 Unimodem Talk/Hangup 對話方塊,以及 UI 不預期 (的任何 TSPI 函式,例如,沒有 hwnd 參數的任何函式) ,則 UI DLL 必須匯出 TUISPI_providerGenericDialog 和 TUISPI_providerGenericDialogData。
注意
原始的 TSPI UI 產生函式 ( TSPI_lineConfigDialog、 TSPI_lineConfigDialogEdit、 TSPI_phoneConfigDialog、 TSPI_providerConfig、 TSPI_providerInstall和 TSPI_providerRemove) 已經過時,且永遠不會由 TAPI 呼叫。 因此,服務提供者 DLL 不需要匯出這些專案。 不過,如果服務提供者想要列為可由 Telephony 主控台新增的公用程式,則會在 1.4 版和更早版本中提供 Windows Telephony 的公用程式,它必須匯出TSPI_providerInstall;如果想要在選取電話語音主控台中啟用 [移除] 按鈕,則必須匯出TSPI_providerRemove;如果想要在 Telephony 中啟用安裝程式按鈕,則必須在 Telephony 中啟用選取主控台時,它必須匯出TSPI_providerConfig。 電話語音主控台會檢查服務提供者 TSP 檔案中是否有這些功能,以調整其使用者介面,以反映可執行哪些作業。
服務提供者 DLL 必須匯出 TAPISRV 進程用來取得應用程式進程中載入之 UI DLL 名稱 的TSPI_providerUIIdentify 函式。 它必須匯出 TSPI_providerGenericDialogData 函式,以接收和回應 UI DLL 的要求,以便顯示資料,而且必須匯出 TAPISRV 程式的TSPI_providerFreeDialogInstance ,以告知服務提供者何時要釋放建立的關聯,以產生非定義為向使用者呈現 UI 的函式。 服務提供者 DLL 可以使用新的 TSPI 訊息 LINE_SENDDIALOGINSTANCEDATA,以單向方式將資料傳送至 UI DLL。
由於 TSPI 和 TUISPI 函式的名稱刻意定義為不同,因此如有需要,服務提供者 DLL 和 UI DLL 可以是相同的 DLL 檔案。 透過適當的分割,這不一定會在應用程式內容中產生任何不必要的記憶體使用量,並可簡化目前可在單一 DLL 中實作之服務提供者的安裝程式。 TAPI 只會呼叫適合使用 DLL 之內容的函式。
電話語音服務提供者和 UI DLL 必須設計成同時從多個應用程式進程叫用 UI 函式的需求。 他們也必須考慮在 LAN 上的不同電腦上,電話語音服務提供者執行的應用程式和 TAPI 服務。