使用Microsoft Agent的COM接口编程
reateInstance()函数来完成:
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的接口指针:
通过IAgentCharacter接口就可以调用动画人物支持的各种方法了:
4.释放对象 程序在退出之前需要把创建的Agent对象释放:
进一步的编程要点 前面介绍的是调用Microsoft Agent服务器最基本的一些步骤,为了完成比较实际的任务,客户程序还应根据自己的情况考虑下面的一些编程要点。 1.检查Agent Server的版本 OLE要求组件或对象具有向后兼容性,高版本对象支持低版本对象的所有接口和属性,这样可以很方便地进行组件升级。客户程序通常应检查对象的版本,只有系统中安装的对象的版本号高于或等于所期望的版本号时才能调用对象。下面的IsValidAgentVersion()函数检查Microsoft Agent的版本号,并将它与定义在AgtSvr.h文件中的版本号相比较:
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |