Поделиться через


Загрузка символьных и анимаций данных

[Агент Майкрософт не рекомендуется использовать в Windows 7 и может быть недоступен в последующих версиях Windows.]

Получив указатель на интерфейс IAgentEx , можно использовать метод Load для загрузки символа и получения его интерфейса IAgentCharacterEx . Существует три различных варианта пути загрузки символа. Первый вариант совместим с Microsoft Agent 1.5, где указанный путь — это полный путь и имя файла символьного файла. Вторая возможность — указать только имя файла. В этом случае агент выполняет поиск в каталоге Chars. Последняя возможность — указать пустой параметр Variant, который вызывает загрузку символа по умолчанию.

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

Этот интерфейс можно использовать для доступа к методам символа:

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

Если службы Microsoft Agent больше не нужны, например при завершении работы клиентского приложения, отпустите его интерфейсы. Обратите внимание, что освобождение символьного интерфейса не приводит к выгрузке символа. Вызовите метод Unload , чтобы сделать это перед освобождением интерфейса 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);