Inicialização e desligamento
Para que um aplicativo use qualquer uma das 30 funções de telefone suplementares do TAPI, ele precisa de uma conexão com o TAPI, por meio do qual ele pode receber mensagens. O aplicativo estabelece essa conexão usando a função phoneInitializeEx . Nessa função, o aplicativo especifica o mecanismo de notificação pelo qual o TAPI informa a aplicação de alterações no estado do telefone e da conclusão assíncrona das funções de telefone.
A função phoneInitializeEx retorna duas informações para o aplicativo: um identificador de aplicativo e o número de dispositivos de telefone. O identificador do aplicativo representa o uso do TAPI pelo aplicativo. As funções TAPI que usam identificadores de telefone não exigem o identificador do aplicativo, pois esse identificador é derivado do identificador de telefone especificado.
A segunda informação retornada por phoneInitializeEx é o número de dispositivos de telefone disponíveis para TAPI. Os dispositivos de telefone são identificados pelo identificador de dispositivo (ID do dispositivo). Os identificadores de dispositivo válidos variam de zero ao número de dispositivos de telefone menos um. Por exemplo, se phoneInitializeEx relatar que há dois dispositivos de telefone em um sistema, os identificadores de dispositivo de telefone válidos serão 0 e 1. Depois que um aplicativo é concluído usando as funções de telefone do TAPI, ele invoca phoneShutdown, passando seu identificador de aplicativo para desligar seu uso de TAPI. Isso permite que o TAPI libere todos os recursos atribuídos ao aplicativo.
Os aplicativos não devem invocar phoneInitializeEx sem abrir posteriormente um telefone (pelo menos para monitoramento). Se o aplicativo não estiver monitorando e não estiver usando nenhum dispositivo, ele deverá chamar phoneShutdown para que os recursos de memória alocados pela biblioteca de vínculo dinâmico TAPI possam ser liberados se desnecessários, e a própria biblioteca possa ser descarregada da memória enquanto não for necessário.
PhoneInitializeEx e phoneShutdown operam de forma síncrona. Ou seja, essas funções retornam uma indicação de êxito ou falha e nunca retornam um identificador de solicitação assíncrona.