Compartilhar via


Carregando dados de caracteres e animação

[O Microsoft Agent foi preterido a partir do Windows 7 e pode estar indisponível nas versões subsequentes do Windows.]

Depois de ter um ponteiro para a interface IAgentEx , você pode usar o método Load para carregar um caractere e recuperar sua interface IAgentCharacterEx . Há três possibilidades diferentes para o caminho carregar de um caractere. O primeiro é compatível com o Microsoft Agent 1.5, em que o caminho especificado é o caminho completo e o nome do arquivo de um arquivo de caracteres. A segunda possibilidade é especificar apenas o nome do arquivo, nesse caso, o Agent procura em seu diretório Chars. A última possibilidade é fornecer um parâmetro Variant vazio que faz com que o caractere padrão seja carregado.

   // Create a variant to store the filename of the character to load

   const LPWSTR kpwszCharacter = L"merlin.acs";

   VariantInit(&vPath);

   vPath.vt = VT_BSTR;
   vPath.bstrVal = SysAllocString(kpwszCharacter);

   // Load the character

   hRes = pAgentEx->Load(vPath, &lCharID, &lRequestID);

   // Get its IAgentCharacterEx interface

   hRes = pAgentEx->GetCharacterEx(lCharID, &pCharacterEx);

Você pode usar essa interface para acessar os métodos do caractere:

   // Show the character.  The first parameter tells Microsoft
   // Agent to show the character by playing an animation.

   hRes = pCharacterEx->Show(FALSE, &lRequestID);

   // Make the character speak

   bszSpeak = SysAllocString(L"Hello World!");

   hRes = pCharacterEx->Speak(bszSpeak, NULL, &lRequestID);

   SysFreeString(bszSpeak);

Quando você não precisar mais de serviços do Microsoft Agent, como quando o aplicativo cliente for desligado, libere suas interfaces. Observe que liberar a interface de caractere não descarrega o caractere. Chame o método Unload para fazer isso antes de liberar a interface IAgentEx :

// Clean up

if (pCharacterEx) {

   // Release the character interface

   pCharacterEx->Release();

   // Unload the character.  NOTE:  releasing the character
   // interface does NOT make the character go away.  You must
   // call Unload.

   pAgentEx->Unload(lCharID);
}
   
// Release the Agent

pAgentEx->Release();

VariantClear(&vPath);