Cargar datos de caracteres y animaciones

[Microsoft Agent está en desuso a partir de Windows 7 y puede no estar disponible en versiones posteriores de Windows.

Después de tener un puntero a la interfaz IAgentEx , puede usar el método Load para cargar un carácter y recuperar su interfaz IAgentCharacterEx . Hay tres posibilidades diferentes para la ruta de acceso de carga de un carácter. La primera es compatible con Microsoft Agent 1.5, donde la ruta de acceso especificada es la ruta de acceso completa y el nombre de archivo de un archivo de caracteres. La segunda posibilidad es especificar solo el nombre de archivo, en cuyo caso, el Agente busca en su directorio Chars. La última posibilidad es proporcionar un parámetro Variant vacío que hace que se cargue el carácter predeterminado.

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

Puede usar esta interfaz para acceder a los métodos del carácter:

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

Cuando ya no necesite servicios de Microsoft Agent, como cuando se cierre la aplicación cliente, suelte sus interfaces. Tenga en cuenta que liberar la interfaz de caracteres no descarga el carácter. Llame al método Unload para hacerlo antes de liberar la interfaz 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);