Chinaunix首页 | 论坛 | 博客
  • 博客访问: 735419
  • 博文数量: 769
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 4985
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-15 16:37
文章分类

全部博文(769)

文章存档

2011年(1)

2008年(768)

我的朋友

分类:

2008-10-15 16:40:21

  这是根据“Dr. GUI and ATL” 的文章自己做的例子程序,主要是在原有接口上继承新的接口,这样在保留原接口的基础上可以扩展新的功能。
 
  功能介绍:
 
  1.创建Calculate组件,添加IFun接口(注意:本例我们在Attributes中我们选择Apartment,Custom,Yes)。在IFun接口中添加函数Add实现两数相加的功能(参数为[in] long n1, [in] long n2, [out, retval] long *pVal)。代码如下:
 
  STDMETHODIMP CCalCulate::Add(long n1, long n2, long *pVal)
 
  {
 
  // TODO: Add your implementation code here
 
  *pVal = n1 + n2;
 
  return S_OK;
 
  }
 
  2.添加IFun2接口,继承IFun接口。步骤如下:
 
  (1)修改。idl文件:
 
  在
 
  interface IFun : IUnknown
 
  {
 
  [helpstring("method Add")] HRESULT Add([in] long n1, [in] long n2, [out, retval] long *pVal);
 
  };
 
  下添加代码:
 
  [
 
  object,
 
  uuid(B9D75722-1950-405b-8BB6-9788A6DB1DB2), //是接口IFun2的标志数,可由VS的GUIDGEN.exe产生
 
  helpstring("IFun2 Interface"),
 
  pointer_default(unique)
 
  ]
 
  interface IFun2 : IFun
 
  {
 
  };
 
  同时将末尾coclass CalCulate函数改为
 
  coclass CalCulate
 
  {
 
  interface IFun;
 
  [default] interface IFun2;
 
  };
 
  (2) 修改CalCulate.h文件
 
  将
 
  class ATL_NO_VTABLE CCalCulate :
 
  public CComObjectRootEx,
 
  public CComCoClass,
 
  public IFun
 
  改为
 
  class ATL_NO_VTABLE CCalCulate :
 
  public CComObjectRootEx,
 
  public CComCoClass,
 
  public IFun2
 
  在
 
  BEGIN_COM_MAP(CCalCulate)
 
  COM_INTERFACE_ENTRY(IFun)
 
  END_COM_MAP()
 
  中添加
 
  COM_INTERFACE_ENTRY(IFun2)
 
  (3) 在IFun2接口中添加Sub函数,方法同添加Add函数不再重复,只是实现时改为
 
  *pVal = n1 - n2; // 返回两数差。
 
  (4) 编写客户端代码,调用IFun2接口的Add和Sub函数。
 
  开发环境: VC6 2000/XP
 
  环境: 2000 WindowsXP
【责编:huangchunmei】

--------------------next---------------------

阅读(430) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~