WEB开发网
开发学院软件开发VC COM 组件设计与应用(十六)——连接点(vc.net) 阅读

COM 组件设计与应用(十六)——连接点(vc.net)

 2006-07-22 22:55:30 来源:WEB开发网   
核心提示: 1、建立一个 MFC 项目,示例程序中的名称叫 Use,COM 组件设计与应用(十六)——连接点(vc.net)(3),2、按照咱们以前所学的知识,添加 #import、AfxOleInit()、......不多浪费口条了,因为反正这个对象在程序结束前是不会退出的STDMETHODIMP

1、建立一个 MFC 项目。示例程序中的名称叫 Use。

2、按照咱们以前所学的知识,添加 #import、AfxOleInit()、......不多浪费口条了。如果你还不会,那么请重新从“第四回”再次阅读。 (注2)

3、这里只介绍一下重点部分。我们需要在调用者工程中,增加“接收器”对象。还记得上回书中的增加“回调接收器”对象的方法吗?上回中,我们的回调接口是从 IUnknown 继承下来的。本回中,由于我们的组件是双接口(Dual)的,连接点也是双接口的,因此这次我们的接收器要从 IDispatch 派生啦。

4、完成 CSink 类的接口函数(虚函数)

STDMETHODIMP CSink::QueryInterface(const struct _GUID &iid,void ** ppv)
{
  *ppv=this;
  return S_OK;
}
ULONG __stdcall CSink::AddRef(void)
{  return 1;  }  // 做个假的就可以,因为反正这个对象在程序结束前是不会退出的
ULONG __stdcall CSink::Release(void)
{  return 0;  }  // 做个假的就可以,因为反正这个对象在程序结束前是不会退出的
STDMETHODIMP CSink::GetTypeInfoCount(unsigned int *)
{  return E_NOTIMPL;  }  // 不用实现,反正也不用
STDMETHODIMP CSink::GetTypeInfo(unsigned int,unsigned long,struct ITypeInfo ** )
{  return E_NOTIMPL;  }  // 不用实现,反正也不用
STDMETHODIMP CSink::GetIDsOfNames(const IID &,LPOLESTR *,UINT,LCID,DISPID *)
{  return E_NOTIMPL;  }  // 不用实现,反正也不用
STDMETHODIMP CSink::Invoke(
  long dispID,
  const struct _GUID &,
  unsigned long,
  unsigned short,
  struct tagDISPPARAMS * pParams,
  struct tagVARIANT *,
  struct tagEXCEPINFO *,
  unsigned int *)
{    // 只需要实现这个就足够啦
  switch(dispID)  // 根据不同的dispID,完成不同的回调函数
  {
  case 1:
    ......  // 这里就能接收到 COM 发出的事件啦
    break;
  case 2:
    ......  // 事件的代号 dispID 其实就是 IDL 文件中的连接点函数的id(n)的号码
    break;
  default:  break;
  }
  return S_OK;
}

五、示例(二)

上一页  1 2 3 4  下一页

Tags:COM 组件 设计

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接