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);