加载字符和动画数据
[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);