网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
Microsoft Agent的COM接口编程
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
高版本对象支持低版本对象的所
有接口和属性,这样可以很方便地进行组件升级。客户程序通常应检查对象
的版本,只有系统中安装的对象的版本号高于或等于所期望的版本号时才能
调用对象。下面的IsValidAgentVersion()函数检查Microsoft Agent的版本
号,并将它与定义在AgtSvr.h文件中的版本号相比较:

  BOOL IsValidAgentVersion(IAgent *pAgent) {
  IDispatch *pdAgent = NULL;
  ITypeInfo *pTypeInfo = 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的声明
和缺省实现可以在Platfo事件。IAgentNotifySink的声明和缺省实现可以
在Platform SDK或Internet Clinet SDK中的Notify.h和Notify.cp
p中找到,客户程序应根据需要修改某些事件的处理函数。下面的代码向
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.自定义命令事件。
    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); //注销IA
gentNotifySink接口
  pSink->Release(); }
  客户程序最感兴趣的两个事件是RequestComplete和Command。Agent
服务器
  • 上一篇资讯: 设计网络服务器ISAPI
  • 下一篇资讯: 如何合并两个ICON
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号