共用方式為


架構 (電話語音 API)

下圖顯示電話語音服務提供者及其相關聯使用者介面動態連結庫 (UI DLL) 的一般架構。

茶匙和相關聯的 ui dll

服務提供者包含至少兩個元件。 服務提供者 DLL (在圖例中指定為 MAIN。TSP) 會在 TAPISRV 程式的內容中執行,並執行與特定應用程式使用裝置相關之使用者介面元素無關之服務提供者的所有工作(很可能,與圖例中未顯示的較低層級元件搭配使用)。 但是,不同於舊版 TAPI,其中使用者介面程式代碼已整合到服務提供者中(且因為先前的架構,在應用程式內容中執行),服務提供者現在必須包含實作使用者介面元素的個別元件。

當應用程式呼叫產生 UI 的 TAPI 函式時,服務提供者 UI DLL 必須匯出由 TAPI 呼叫的函式:TUISPI_lineConfigDialogTUISPI_lineConfigDialogEditTUISPI_phoneConfigDialogTUISPI_providerConfigTUISPI_providerInstallTUISPI_providerRemove。 每個函式都包含作為 TAPI 中回呼函式指標的參數,類型 TUISPIDLLCALLBACK,UI DLL 可用來與 TAPISRV 程式中執行的服務提供者 DLL 雙向通訊(同時傳送和接收數據)。 如果服務提供者曾經產生自發的UI,例如Unimodem Talk/Hangup 對話框,以及任何不需要UI的 TSPI 函式(例如,沒有任何 hwnd 參數的函式),則UI DLL必須導出 TUISPI_providerGenericDialogTUISPI_providerGenericDialogData

注意

原始的 TSPI UI 產生函式(TSPI_lineConfigDialogTSPI_lineConfigDialogEditTSPI_phoneConfigDialogTSPI_providerConfigTSPI_providerInstallTSPI_providerRemove)已經過時,而且永遠不會由 TAPI 呼叫。 因此,服務提供者 DLL 不需要匯出這些專案。 不過,如果服務提供者想要列為 Telephony 控制面板可以新增的公用程式,則 1.4 版和更早版本中提供 Windows Telephony 的公用程式必須匯出 TSPI_providerInstall;如果想要在選取 [電話語音控制面板] 中啟用 [移除] 按鈕,則必須匯出 TSPI_providerRemove;如果想要在選取 [電話語音控制面板] 中啟用 [安裝程式] 按鈕,則必須匯出 TSPI_providerConfig。 電話語音控制面板會檢查服務提供者 TSP 檔案中是否有這些功能,以調整其使用者介面,以反映可執行哪些作業。

 

服務提供者 DLL 必須匯出 TAPISRV 進程用來取得在應用程式進程中載入之 UI DLL 名稱的 TSPI_providerUIIdentify 函式。 它必須導出 TSPI_providerGenericDialogData 函式來接收和回應 UI DLL 的要求,才能顯示數據,而且它必須匯出 TSPI_providerFreeDialogInstance,讓 TAPISRV 程式告訴服務提供者何時釋放建立的關聯,以便產生自發 UI 與未定義為向使用者呈現 UI 的函式。 服務提供者 DLL 可以使用新的 TSPI 訊息 LINE_SENDDIALOGINSTANCEDATA,單向將數據傳送至 UI DLL。

由於 TSPI 和 TUISPI 函式的名稱會刻意定義為不同,因此如有需要,服務提供者 DLL 和 UI DLL 可以是相同的 DLL 檔案。 使用適當的分割,這不一定會導致應用程式內容中任何不必要的記憶體使用量,而且可以簡化目前可在單一 DLL 中實作之服務提供者的安裝程式。 TAPI 只會呼叫適合使用 DLL 之內容的函式。

電話語音服務提供者和UI DLL必須同時以需求設計,才能同時從多個應用程式進程叫用UI函式。 他們也必須考慮在 LAN 上的個別電腦上執行電話語音服務提供者的應用程式和 TAPI 服務。