Fonctions non conçues pour générer l’interface utilisateur
Supposons que le fournisseur de services doit afficher une boîte de dialogue (comme la boîte de dialogue Unimodem ou ATSP Talk/Hangup) pendant le traitement de lineMakeCall ou lineDial. Dans ce cas, il s’agit du fournisseur de services, et non de l’application, qui décide que l’interface utilisateur doit être affichée.
Pour appeler la DLL d’interface utilisateur dans le processus d’application, le fournisseur de services appelle le rappel TSPI Line_Event, générant un message LINE_CREATEDIALOGINSTANCE, en passant un pointeur vers une structure de type TUISPICREATEDIALOGINSTANCEPARAMS. Cette structure contient l'dwRequestID de la fonction avec laquelle l’interface utilisateur est associée, ce qui permet à TAPISRV d’identifier l’application cliente dans laquelle l’interface utilisateur doit être générée.
TAPISRV demande à l’instance d’application appropriée de TAPI de charger la DLL d’interface utilisateur et de créer un thread pour l’interface utilisateur au sein du processus de l’application. À partir de ce nouveau thread d’interface utilisateur, TAPI appelle la fonction TUISPI_providerGenericDialog de la DLL d’interface utilisateur, en passant des données spécifiées par le fournisseur de services de téléphonie dans la structure passée avec le message LINE_CREATEDIALOGINSTANCE ; la DLL d’interface utilisateur affiche la boîte de dialogue appropriée (qui est une question de conception privée entre la DLL d’interface utilisateur et le fournisseur de services de téléphonie). La DLL d’interface utilisateur ne revient pas de TUISPI_providerGenericDialog tant que la boîte de dialogue n’est pas fermée.
Le fournisseur de services de téléphonie peut générer des données mises à jour à afficher dans la boîte de dialogue (ou, par exemple, indiquer à la boîte de dialogue d’être fermée, si l’appel est abandonné ou d’autres événements se produisent) en envoyant un message LINE_SENDDIALOGINSTANCEDATA. TAPISRV transmet les données à TAPI, qui appelle la fonction TUISPI_providerGenericDialogData de la DLL d’interface utilisateur. Ce mécanisme fournit un « envoi » unidirectionnel à la DLL d’interface utilisateur. Si la DLL d’interface utilisateur souhaite informer le fournisseur de services de téléphonie des résultats de la boîte de dialogue ou obtenir d’autres données, elle peut appeler la fonction DllCallbackProc (pointeur vers lequel elle a été reçue quand TUISPI_providerGenericDialog a été appelée).
Lorsque la boîte de dialogue est ignorée, TUISPI_providerGenericDialog retourne à TAPI. TAPI appelle freeLibrary pour libérer la DLL d’interface utilisateur et quitte le thread d’interface utilisateur qu’il a créé dans le contexte de l’application. Il demande ensuite à TAPISRV d’appeler la fonction TSPI_providerFreeDialogInstance du fournisseur de services de téléphonie pour dissocier l’association créée lorsque le fournisseur de services de téléphonie a initialement envoyé le message LINE_CREATEDIALOGINSTANCE. Cette fonction est également appelée si le processus d’application s’arrête de façon inattendue avant TUISPI_providerGenericDialog retour.