快速业务通道

使用Microsoft Agent的COM接口编程

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29
o = NULL;
ITypeLib *pTypeLib = NULL;
TLIBATTR *pTypeLibAttr = NULL;
BOOL bValid = FALSE;
UINT uiIndex;
pAgent->QueryInterface(IID—IDispatch, (LPVOID *)&pdAgent);
pdAgent->GetTypeInfo(0, 0, &pTypeInfo); //取得类型信息
pTypeInfo->GetContainingTypeLib(&pTypeLib, &uiIndex);//取得类型库
pTypeLib->GetLibAttr(&pTypeLibAttr); //取得类型库中的属性
if ((pTypeLibAttr->wMajorVerNum > AGENT—VERSION—MAJOR) ||((pTypeLibAttr->wMajorVerNum == AGENT—VERSION—MAJOR) &&(pTypeLibAttr->wMinorVerNum >= AGENT—VERSION—MINOR)))
bValid = TRUE; //期望的版本号定义在AgtSvr.h文件中
if (pTypeLib) {
if (pTypeLibAttr) pTypeLib->ReleaseTLibAttr(pTypeLibAttr);
pTypeLib->Release(); }
if (pTypeInfo) pTypeInfo->Release();
if (pdAgent) pdAgent->Release();
return bValid;}

2.实现IAgentNotifySink接口

为了能够处理用户的输入,了解Agent对象的状态,客户程序应实现IAgentNotifySink接口来接收Agent对象的事件。IAgentNotifySink的声明和缺省实现可以在Platform SDK或Internet Clinet SDK中的Notify.h和Notify.cpp中找到,客户程序应根据需要修改某些事件的处理函数

。下面的代码向Agent对象注册IAgentNotifySink接口,其中AgentNotifySink是从IAgentNotifySink继承而来:

pSink = new AgentNotifySink;
pSink->AddRef(); //增加引用计数
hRes = pAgent->Register((IUnknown *)pSink, &lNotifySinkID);//进行注册
...
if (pSink) {
pAgent->Unregister(lNotifySinkID); //注销IAgentNotifySink接口
pSink->Release(); }

 

客户程序最感兴趣的两个事件是RequestComplete和Command。Agent服务器采用异步方式来处理客户程序的各种请求,这样客户程序可以在请求服务的同时进行自己的工作,当服务器完成一项请求时就会激发RequestComplete事件,客户程序可以判断是哪一项请求已经结束,并做相应的处理。Command事件是当用户使用鼠标或麦克风向动画人物发出命令时激发的,客户程序可以通过IAgentUserInput接口来了解命令的具体信息。

3.自定义命令

Agent服务器为每个动画人物都提供了一些缺省的命令,这些命令出现在关联菜单或命令窗口中,客户程序可以通过IAgentCommands接口添加自定义命令。

为了得到IAgentCommands的接口指针,应使用参数IID—IAgentCommands来调用IAgentCharacter::QueryInterface(),IAgentCommands的Add()或Insert()方法可以加入自定义命令,同时设置Caption、Visible和Voice属性,指明该命令是否显示出来,显示在关联菜单中还是在命令窗口中。

Agent服务器为每个命令赋予一个ID值,客户程序可以使用这个ID值调用IAgentCommands::GetCommand()方法,得到每个命令的IAgentCommand接口指针,从而对单个命令的各种属性进行调整。

4.WAV文件代替语音合成

Microsoft Agent目前只支持英语的语音合成功能,要输出中文时只能用WAV文件来代替。如果给IAgentCharacter::Speak()方法的第二个参数传递一个WAV文件的路径,那么Agent服务器自动播放这个WAV文件,并在文字气球中显示出第一个参数中包含的文字,如果给第二个参数传递一个带音节信息的LWV文件的路径,则不需要在第一个参数中提供文字,因为LWV文件中包含有文字信息。当使用LWV文件时,动画人物的嘴部动作能与输出的语音保持一致,所以在可能的情况应该尽量使用LWV文件,这种格式的文件可用Microsoft Agent Linguistic Informatio

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号