加载字符和动画数据

[Microsoft 代理从 Windows 7 开始已弃用,可能在后续版本的 Windows 中不可用。]

拥有指向 IAgentEx 接口的指针后,可以使用 Load 方法加载字符并检索其 IAgentCharacterEx 接口。 字符的加载路径有三种不同的可能性。 第一个与 Microsoft 代理 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 代理服务(例如客户端应用程序关闭时),请释放其接口。 请注意,释放字符接口不会卸载字符。 在释放 IAgentEx 接口之前,调用 Unload 方法执行此操作:

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