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

COM 组件设计与应用(十五)——连接点(vc6.0)

 2006-07-22 22:55:35 来源:WEB开发网   
核心提示: HRESULT Fire_Timer(VARIANT varDate){ CComVariant varResult; T* pT = static_cast(this); int nConnectionIndex; CComVariant* pvars = new CComVariant
HRESULT Fire_Timer(VARIANT varDate)
{
  CComVariant varResult;
  T* pT = static_cast(this);
  int nConnectionIndex;
  CComVariant* pvars = new CComVariant[1];
  int nConnections = m_vec.GetSize();
    
  for (nConnectionIndex = 0; nConnectionIndex < nConnections; nConnectionIndex++)
  {
   pT->Lock();
   CComPtr sp = m_vec.GetAt(nConnectionIndex);
   pT->Unlock();
   IDispatch* pDispatch = reinterpret_cast(sp.p);
   if (pDispatch != NULL)
   {
     VariantClear(&varResult);
     // 原始代码,这里居然是 pvars[0]=&varData?愚蠢之极!只好你自己修改啦
    pvars[0] = varDate;
     DISPPARAMS disp = { pvars, NULL, 1, 0 };
     pDispatch->Invoke(0x1, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, &varResult, NULL, NULL);
   }
  }
  delete[] pvars;
  return varResult.scode;
}

在编写调用者客户端代码方面,如果你需要接收时钟事件,那么可以仿照示例一再从 IDispatch 派生一个时钟接收器。大家下载事例程序代码,里面有丰富的注释信息。

六、小结

连接点,尤其是双接口的连接点,在远程(DCOM)环境上运行效率是比较低的。如果你只想完成简单的“通知”功能,那么前一回中的“回调接口”是一个明智的方案,并且可以运行在DCOM环境上。连接点方案当然也很重要,因为微软的许多应用程序(IE、Office......)都支持连接点,并且 ActiveX 只能通过连接点接口提供“事件”功能。所以,咱们还是都掌握为善吧。善哉 、善哉......


注1:金庸老先生的武侠小说里,总是用“XX 紧”来表示“很 XX”。我也学一学,嘿嘿。

注2:如果看了好几遍,您老人家还不会的话,那只好......先别学了。5555

注3:DATA 类型就是是8字节的double,它的整数部分表示从 1899年12月30日开始的总天数,小数部分表示当天的时间已经渡过了一天的多少分之一。这个时间类型,用VARIANT表示,就是VT_DATE类型,MFC 中用 COleDateTime 表示。示例程序中有对该类型的操作示范。

上一页  1 2 3 4 5 6 

Tags:COM 组件 设计

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