lib odbccp32.lib,最后要确保uuid.lib、odbc32.lib
odbccp32.lib,最后要确保系统中安装有Microsoft Agent及动画人物数据。
2.创建Microsoft Agent对象
创建OLE对象之前需要初始化OLE,这由OleInitialize()函数来完成,如果
OLE
初始化不成功,那么就无法继续执行后面的代码,创建对象由
CoCreateInstance()
函数来完成:
if (FAILED(OleInitialize(NULL))) return -1;//
初始化OLE
hRes = CoCreateInstance(CLSID—AgentServer,NULL,CLSCTX—SERVER,
IID—IAgent,(LPVOID *)&pAgent); //创建Microsoft Agent Server的实例
if (FAILED(hRes)) return -1;
CoCreateInstance()的第一个参数是对象的CLSID(类代码),Microsoft
Agent Server的CLSID为定义在AgtSvr—i.c文件中的CLSID—AgentServer,
这个128位的编码唯一地标识了Agent服务器,服务器所在路径和运行参数等
信息都放在系统
注册表中;第二个参数一般情况下设为NULL;第三个参数用来
指明对象的运行环境,如远程或本地,此处设为CLSCTX—SERVER;第四个参数
指明用来与对象通信的接口的ID,这也是一个128位的编码,Agent的接口ID为
IID—IAgent;第五个参数是用来接收IAgent的接口指针。
如果Microsoft Agent Server还没有在内存中运行,那么
CoCreateInstance()会启动它并创建一个Agent对象,如果服务器已经运行了,
则CoCreateInstance()会与之连接并创建一个Agent对象。当所有的Agent对象
都被释放了后,服务器自动退出。
3.装入动画人物数据
下面的代码调用IAgent::Load()方法来装入一个动画人物的数据,由于
Agent服务器在自己的内存空间中运行,所以传送的字符串变量需要用
SysAllocString()来分配内存:
VariantInit(&vPath); //初始化OLE变量
vPath.vt = VT—BSTR; //指明变量类型为Unicode的字符串
vPath.bstrVal=SysAllocString(kpwszCharacter);//kpwszCharacter
为动画人物数据的存放路径
hRes = pAgent->Load(vPath,&lCharID,&lRequestID); //装入数据,
人物ID在lCharID中返回
hRes = pAgent->GetCharacter(lCharID,&pdCharacter); //获取
lCharID的IDispatch接口指针
调用IDispatch::QueryInterface()方法可以得到IAgentCharacter的接
口指针:
hRes = pdCharacter->QueryInterface(IID—IAgentCharacter,
(LPVOID *)&pCharacter);
pdCharacter->Release(); //释放IDispath 通过IAgentCharacter接
口就可以调用动画人物支持的各种方法了:
hRes = pCharacter->Show(FALSE, &lRequestID); //显示动画人物
hRes = pCharacter->MoveTo(320,240,100,&lRequestID); //移动动
画人物到屏幕中央
bszSpeak = SysAllocString(L"Hello World!"); //分配字符串
hRes = pCharacter->Speak(bszSpeak, NULL, &lRequestID); //让动
画人物说话
SysFreeString(bszSpeak); //释放字符串所占内存
4.释放对象
程序在退出之前需要把创建的Agent对象释放:
if (pCharacter) {
pCharacter->Release(); //释放IAgentCharacter接口
pAgent->Unload(lCharID); //卸载动画人物数据
}
pAgent->Release(); //释放Agent对象
VariantClear(&vPath); //清除OLE变量
VariantClear(&vPath); //清除OLE变量
进一步的编程要点
前面介绍的是调用Microsoft Agent服务器最基本的一些步骤,为了完
成比较实际的任务,客户程序还应根据自己的情况考虑下面的一些编程要点。
1.检查Agent Server的版本
OLE要求组件或对象具有向后兼容性,